Существует ли в SQL Server 2005 концепция одноразовой или локальной функции, объявленной внутри сценария SQL или хранимой процедуры? Я хотел бы абстрагироваться от некоторых сложностей в сценарии, который я пишу, но для этого потребуется возможность объявить функцию.
Просто любопытно.
sql
sql-server
sql-server-2005
tsql
scripting
Марк Карпентер
источник
источник
Ответы:
Вы можете позвонить
CREATE Function
в начале вашего сценария иDROP Function
ближе к концу.источник
Вы можете создавать временные хранимые процедуры, например:
в сценарии SQL, но не в функциях. Вы могли бы сохранить в proc, что это приведет к временной таблице, а затем использовать эту информацию позже в скрипте ..
источник
BEGIN
ключевое слово, и заменитьEND
ключевое слово сGO
.Общие табличные выражения позволяют вам определять, что по сути является представлениями, которые сохраняются только в рамках ваших операторов select, insert, update и delete. В зависимости от того, что вам нужно сделать, они могут быть ужасно полезными.
источник
Я знаю, что меня могут критиковать за предложение динамического SQL, но иногда это хорошее решение. Просто убедитесь, что вы понимаете последствия для безопасности, прежде чем рассматривать это.
источник
В сценариях у вас больше возможностей и больше возможностей для рациональной декомпозиции. Посмотрите на режим SQLCMD (меню запроса -> режим SQLCMD), в частности, на команды: setvar и: r.
В хранимой процедуре ваши возможности очень ограничены. Вы не можете создать определение функции непосредственно в теле процедуры. Лучшее, что вы можете сделать, это что-то вроде этого с динамическим SQL:
Это приближается к глобальной временной функции, если такая существует. Он по-прежнему виден другим пользователям. Вы можете добавить @@ SPID вашего соединения, чтобы сделать имя уникальным, но тогда в остальной части процедуры также потребуется использовать динамический SQL.
источник
Ниже приводится то, что я использовал в прошлом, чтобы удовлетворить потребность в скалярной UDF в MS SQL:
Этот подход, который использует глобальную переменную для ПРОЦЕДУРЫ, позволяет вам использовать функцию не только в ваших сценариях, но и в ваших потребностях динамического SQL.
источник