En SQL Server 2005, ¿existe un concepto de función local o de uso único declarado dentro de un script SQL o un procedimiento almacenado? Me gustaría abstraer algo de complejidad en un script que estoy escribiendo, pero requeriría poder declarar una función.
Sólo curioso.
sql
sql-server
sql-server-2005
tsql
scripting
Mark Carpenter
fuente
fuente
Respuestas:
Puede llamar
CREATE Function
cerca del comienzo de su guión yDROP Function
cerca del final.fuente
Puede crear procedimientos almacenados temporales como:
en un script SQL, pero no funciones. Sin embargo, podría hacer que proc almacene su resultado en una tabla temporal y luego use esa información más adelante en el script.
fuente
BEGIN
palabra clave y la reemplazoEND
porGO
.Las expresiones de tabla comunes le permiten definir lo que son esencialmente vistas que duran solo dentro del alcance de sus declaraciones de selección, inserción, actualización y eliminación. Dependiendo de lo que necesite hacer, pueden ser muy útiles.
fuente
Sé que pueden criticarme por sugerir SQL dinámico, pero a veces es una buena solución. Solo asegúrese de comprender las implicaciones de seguridad antes de considerar esto.
fuente
En los scripts, tiene más opciones y una mejor oportunidad de descomposición racional. Mire en el modo SQLCMD (menú de consulta -> modo SQLCMD), específicamente los comandos: setvar y: r.
Dentro de un procedimiento almacenado, sus opciones son muy limitadas. No puede crear una función definida directamente con el cuerpo de un procedimiento. Lo mejor que puede hacer es algo como esto, con SQL dinámico:
Esto se aproxima a una función temporal global, si tal cosa existiera. Todavía es visible para otros usuarios. Puede agregar el @@ SPID de su conexión para unificar el nombre, pero eso requeriría que el resto del procedimiento también use SQL dinámico.
fuente
Lo siguiente es lo que he usado en el pasado para lograr la necesidad de una UDF escalar en MS SQL:
Este enfoque que utiliza una variable global para el PROCEDIMIENTO le permite hacer uso de la función no solo en sus scripts, sino también en sus necesidades de SQL dinámico.
fuente