2010-07-02 23 views
19

Tengo una expresión compleja que calcula un valor a partir de una fecha que tengo que usar en varias columnas de fecha.
¿Puedo definir una función local temporal en mi consulta para evitar copiar y pegar esta expresión? ?¿Es posible definir una función local en una consulta TSQL?

gustan:

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

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

Como solución, sé que puedo hacer un CREATE FUNCTION // DROP FUNCTION, pero prefiero evitarlo.

+0

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

Respuesta

6

No, no hay forma - crear/soltar es la única opción.

+0

Esta respuesta menciona una forma en que es posible: http://stackoverflow.com/a/981461/750216 –

0

No, no localmente. Pero puede crear una UDF en la base de datos que no tenga que acceder realmente a ningún dato para hacer su cálculo.

¿Por qué no convertirlo en un UDF permanente?

1

SQL Server admite anonymous blocks colocando la (s) consulta (s) dentro de un bloque BEGIN/END, pero no he podido encontrar un ejemplo donde alguien definió una función dentro de él. Oracle tuvo la funcionalidad por un tiempo ...

+0

¿Podría explicar más sobre bloques anónimos en SQL Server? Ese enlace está roto y no puedo encontrar nada yo mismo. –

Cuestiones relacionadas