Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Могут ли функции или процедуры за параметр принимать целую таблицу? / 9 сообщений из 9, страница 1 из 1
12.07.2021, 11:31
    #40083324
sysn1k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Могут ли функции или процедуры за параметр принимать целую таблицу?
Значения параметра, переданные при вызове процедуры, должны быть константами или переменными - оффишил документация.
У функций тоже самое? То есть таблицы не могут быть параметрами, только их столбцы или числа?
...
Рейтинг: 0 / 0
12.07.2021, 11:47
    #40083333
sysn1k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Могут ли функции или процедуры за параметр принимать целую таблицу?
Функция может принимать другую функцию. А сработает функция, если вложенная функция выводит таблицу (RETURNS TABLE)?
Например:
Код: sql
1.
SUM (SOME_FUN_TABLE(@параметр))
...
Рейтинг: 0 / 0
12.07.2021, 12:14
    #40083342
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Могут ли функции или процедуры за параметр принимать целую таблицу?
sysn1k
Значения параметра, переданные при вызове процедуры, должны быть константами или переменными - оффишил документация.
У функций тоже самое? То есть таблицы не могут быть параметрами, только их столбцы или числа?


Ваще то, табличные аргументы процедур имеют место быть.
https://www.sqlshack.com/table-valued-parameters-in-sql-server/
Только не надо это.
...
Рейтинг: 0 / 0
12.07.2021, 14:34
    #40083377
uaggster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Могут ли функции или процедуры за параметр принимать целую таблицу?
aleks222

Только не надо это.

Почему, кстати?
Какие противопоказания?
...
Рейтинг: 0 / 0
12.07.2021, 15:05
    #40083387
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Могут ли функции или процедуры за параметр принимать целую таблицу?
uaggster
Какие противопоказания?
Отсутствие alter type.
Если нужно изменить табличный тип, который уже используется в модулях, придется задействовать грязный хак.
А если какие-то модули привязаны к схеме, то все будет совсем печально.
...
Рейтинг: 0 / 0
12.07.2021, 15:43
    #40083393
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Могут ли функции или процедуры за параметр принимать целую таблицу?
sysn1k,

вы можете, например, передать параметром имя таблицы или целое SQL-предложение
и далее в процедуре использовать для динамического SQL (dynamic SQL)

т.е. вы в процедуре формируете VARCHAR строку, содержащую SQL-запрос к, например, таблице, имя которой вы передали параметром процедуры. Ещё одним параметром, например, передаёте WHERE-часть. Этот запрос выполняете и что-то с результатами делаете.


https://web-shpargalka.ru/ms-sql-dynamic-sql.php
...
Рейтинг: 0 / 0
13.07.2021, 15:12
    #40083602
uaggster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Могут ли функции или процедуры за параметр принимать целую таблицу?
invm
uaggster
Какие противопоказания?
Отсутствие alter type.
Если нужно изменить табличный тип, который уже используется в модулях, придется задействовать грязный хак.
А если какие-то модули привязаны к схеме, то все будет совсем печально.

Это про sp_rename ?
А что в нем грязного? Примерно как order by 1/0 или Select @s=@s+strVield from tbl
...
Рейтинг: 0 / 0
13.07.2021, 21:50
    #40083665
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Могут ли функции или процедуры за параметр принимать целую таблицу?
Если пользоваться современными методами разработки, т.е. при помощи проекта, то студия сама автоматизирует все обновления и переименования. Но надо помнить, что это может вылиться в пересоздание массы объектов с заполнением данными.

Лично я убедился и не раз, что применение пользовательских типов крайне неприятно при сопровождении проекта.
...
Рейтинг: 0 / 0
14.07.2021, 06:28
    #40083697
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Могут ли функции или процедуры за параметр принимать целую таблицу?
Владислав Колосов
Лично я убедился и не раз, что применение пользовательских типов крайне неприятно при сопровождении проекта.

Ну, использование простых UDTT (по факту - массивов примитивов: таблица интов, таблица гуидов) пока что не подводило, и альтерить в таких типах просто нечего. Если в UDTT начинают расширяться-добавляться поля, то да, проще использовать альтернативные методы - временные таблицы, xml, итд.
uaggster
Это про sp_rename ?
А что в нем грязного?

То, что если UDTT задействован в schema-bound модуле, то этот хак не сработает. Придется сначала отвязать от схемы энное количество модулей, и эта цепочка (а её ещё нужно выяснить по зависимостям модулей) может быть длинной.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Могут ли функции или процедуры за параметр принимать целую таблицу? / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]