2009-04-10 19 views
34

¿Existe alguna posibilidad de crear un procedimiento almacenado temporal o una función en MS SQL 2005? Me gustaría utilizar este procedimiento almacenado solo en mi consulta, por lo que después de la ejecución desaparecerá.Función temporal o procedimiento almacenado en T-SQL

Tengo una consulta Me gustaría EXEC contra algunos datos. Pero para cada tabla voy a procesar este comando, necesito cambiar algunas partes de él. Así que pensé que crearía un SP temporal que me devolvería una consulta de los argumentos que proporcioné (como el nombre de la tabla, etc.) y que ejecutaría esta consulta mediante EXEC.

Y este procedimiento almacenado no será útil para mí más tarde así que me gustaría tenerlo temporal para que cuando termino la ejecución de mi consulta - que va a desaparecer.

+1

Respuesta editada re su comentario –

Respuesta

27

Vuelva a su edición - parece que debería estar utilizando sp_ExecuteSQL contra un (parametrizado) nvarchar que contiene TSQL.

Buscar en sp_ExecuteSQL; un ejemplo sencillo:

DECLARE @SQL nvarchar(4000), 
@Table varchar(20) = 'ORDERS', 
@IDColumn varchar(20) = 'OrderID', 
@ID int = 10248 

SET @SQL = 'SELECT * FROM [' + @Table + '] WHERE [' 
    + @IDColumn + '] = @Key' 

    EXEC sp_executesql @SQL, N'@Key int', @ID 

en cuenta que los nombres de tabla y columna debe ser concatenadas en la consulta, pero los valores (tales como @Key) se puede parametrizar.


Hay un procedimiento almacenado temporal, pero es por conexión, no por sp.

Sin embargo, es posible que desee mirar a expresiones de tabla comunes - que puede ser lo que está después (aunque sólo se puede leer de una vez).

Tal vez si se puede aclarar lo que está tratando de hacer ?

+0

¿Puedes aclarar el bit del "procedimiento almacenado temporal"? ¿Te refieres a sp_prepare o sp_executesql? – gbn

+1

He agregado más explicaciones sobre lo que trato de hacer. Espero que ayude a entender mi idea. –

+1

+1 por mencionar CTE! Una característica muy poco utilizada en SQL Server 2005 ... –

-3

Simplemente use el SQL del proceso almacenado dentro de su consulta. No es necesario crear un procedimiento almacenado dentro de la base de datos, no le dará ninguna ventaja sobre una consulta normal dentro de su consulta.

+14

pero esto no permite la reutilización del código de proc almacenado, que veo como un beneficio para este enfoque. – Tone

26

Esta pregunta es un poco antigua, pero las otras respuestas no proporcionaron la sintaxis para crear procedimientos temporales. La sintaxis es la misma que para las tablas temporales: #name para objetos temporales locales, ## name para objetos temporales globales.

CREATE PROCEDURE #uspMyTempProcedure AS 
BEGIN 
    print 'This is a temporary procedure' 
END 

Esto se describe en la sección "Nombre del procedimiento" de la documentación oficial. http://technet.microsoft.com/en-us/library/ms187926%28v=sql.90%29.aspx

Estoy utilizando esta técnica para deduplicar el código para mis pruebas de unidad primitivas T-SQL. Un marco de prueba de unidad real sería mejor, pero esto es mejor que nada y "basura recolecta" después de sí mismo.

+2

¿Y qué tal las funciones? ¿Para poder usarlos en expresiones SELECT COLUMN? – jgomo3

Cuestiones relacionadas