2010-07-02 2 views
19

Mam złożone wyrażenie obliczające wartość od daty, które muszę użyć w wielu kolumnach daty.
Czy mogę zdefiniować tymczasową funkcję lokalną w moim zapytaniu, aby uniknąć kopiowania i wklejania tego wyrażenia. ?Czy jest możliwe zdefiniowanie funkcji lokalnej w zapytaniu TSQL?

lubię:

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

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

Jako obejście, wiem, że mogę zrobić CREATE FUNCTION // DROP FUNCTION, ale wolałbym tego uniknąć.

+0

Zobacz: http://stackoverflow.com/questions/981451/can-i-create-a-one-time-use-function-in-a-script- lub-stored-procedure – Weasle

Odpowiedz

6

Nie, nie ma mowy - jedyną opcją jest tworzenie/upuszczanie.

+0

Ta odpowiedź wymienia sposób, w jaki jest to możliwe: http://stackoverflow.com/a/981461/750216 –

0

Nie, nie lokalnie. Ale można utworzyć UDF w bazie danych, która nie musi faktycznie uzyskać dostępu do jakichkolwiek danych, aby wykonać obliczenia.

Dlaczego nie uczynić go stałym UDF?

1

Serwer SQL obsługuje anonymous blocks, umieszczając zapytanie (zapytania) wewnątrz bloku BEGIN/END, ale nie udało mi się znaleźć przykładu, w którym ktoś zdefiniował funkcję w nim. Oracle miał funkcjonalność na chwilę ...

+0

Czy możesz wyjaśnić więcej o anonimowych blokach w SQL Server? To połączenie jest zerwane i sam nie mogę znaleźć niczego. –