2010-07-02 7 views
19

Ho un'espressione complessa che calcola un valore da una data che devo utilizzare su più colonne di data.
Posso definire una funzione locale temporanea nella mia query per evitare di copiare e incollare questa espressione. ?È possibile definire una funzione locale in una query TSQL?

piace:

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

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

Per aggirare il problema, so di poter fare un CREATE FUNCTION // DROP FUNCTION, ma io preferirei evitarlo.

+0

Vedi: http://stackoverflow.com/questions/981451/can-i-create-a-una-time-use-function-in-a-Script- o stored procedure – Weasle

risposta

6

No, non c'è modo: creare/rilasciare è l'unica scelta.

+0

Questa risposta indica un modo in cui è possibile: http://stackoverflow.com/a/981461/750216 –

0

No, non localmente. Ma puoi creare una UDF nel database che non deve accedere effettivamente a nessun dato per fare il suo calcolo.

Perché non renderlo un UDF permanente?

1

SQL Server supporta anonymous blocks inserendo la query o le query in un blocco BEGIN/END, ma non sono stato in grado di trovare un esempio in cui qualcuno abbia definito una funzione al suo interno. Oracle ha avuto la funzionalità per un po '...

+0

Puoi spiegare di più sui blocchi anonimi in SQL Server? Quel collegamento è rotto e non riesco a trovare nulla da solo. –