Можно ли определить локальную функцию в запросе TSQL? - PullRequest
22 голосов
/ 02 июля 2010

У меня есть сложное выражение, вычисляющее значение из даты, которое я должен использовать для нескольких столбцов даты.
Могу ли я определить временную локальную функцию в своем запросе, чтобы избежать копирования и вставки этого выражения.?

как:

create MyLocalFunc(@ADate datetime) 
returns int as
begin
  blablabla
end

select
  MyLocalFunc(col1), col2, MyLocalFunc(col3), col4, MyLocalFunc(col5)
from
  mytable

Как обходной путь, я знаю, что могу сделать CREATE FUNCTION // DROP FUNCTION, но я бы предпочел избежать этого.

Ответы [ 3 ]

7 голосов
/ 02 июля 2010

Нет, пути нет - единственный выбор - создать / отбросить.

1 голос
/ 03 июля 2010

SQL Server поддерживает анонимные блоки , помещая запрос (-ы) в блок BEGIN / END, но я не смог найти пример, где кто-то определил функцию внутри него.Oracle какое-то время функционировал ...

0 голосов
/ 02 июля 2010

Нет, не локально.Но вы можете создать UDF в базе данных, которая не должна фактически иметь доступ к каким-либо данным, чтобы выполнить их расчет.

Почему бы не сделать его постоянным UDF?

...