2009-04-10 14 views
34

Esiste la possibilità di creare una stored procedure o una funzione temporanea su MS SQL 2005? Vorrei utilizzare questa procedura memorizzata solo nella mia query, quindi dopo l'esecuzione sarà sparita.Funzione temporanea o stored in T-SQL

Ho una domanda che desidero EXEC rispetto ad alcuni dati. Ma per ogni tabella elaborerò questo comando, ho bisogno di cambiarne alcune parti. Quindi ho pensato di creare un SP temporaneo che restituisse una query dagli argomenti che ho fornito (come il nome della tabella e così via) e che esegua questa query da EXEC.

E questa procedura memorizzata non sarà utile per me in un secondo momento, quindi mi piacerebbe averlo temporaneamente in modo che quando termino l'esecuzione della mia query - scomparirà.

+1

Risposta modificata per il tuo commento –

risposta

27

Re la tua modifica - sembra che dovresti usare sp_ExecuteSQL contro uno (parametrizzato) nvarchar che contiene TSQL.

Cerca su sp_ExecuteSQL; un semplice esempio:

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 

nota che i nomi di tabella e colonna deve essere concatenata nella query, ma valori (ad esempio @Key) è parametrizzabile.


C'è una stored procedure temporanea - ma è per connessione, non per sp.

Tuttavia, è possibile visualizzare le espressioni di tabella comuni: potrebbero essere ciò che si desidera (anche se è possibile leggerle solo una volta).

Forse se è possibile chiarire cosa si sta cercando di do?

+0

Potete chiarire il bit "procedura memorizzata temporanea"? Intendi sp_prepare o sp_executesql? – gbn

+1

Ho aggiunto qualcosa di più su ciò che cerco di fare. Spero che aiuti a capire la mia idea. –

+1

+1 per aver menzionato la CTE! Una funzionalità ampiamente utilizzata in SQL Server 2005 ... –

-3

Basta usare l'SQL del proc memorizzato all'interno della query. Non c'è bisogno di creare una stored procedure all'interno del DB, non ti darà alcun vantaggio rispetto a una normale query all'interno della tua query.

+14

ma ciò non consente il riutilizzo del codice di processo memorizzato, che considero un vantaggio per questo approccio. – Tone

26

Questa domanda è un po 'vecchia, ma le altre risposte non sono riuscite a fornire la sintassi per la creazione di procedure temporanee. La sintassi è la stessa delle tabelle temporanee: #name per oggetti temporanei locali, ## name per oggetti temporanei globali.

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

Questo è descritto nella sezione "Nome procedura" della documentazione ufficiale. http://technet.microsoft.com/en-us/library/ms187926%28v=sql.90%29.aspx

Sto usando questa tecnica per deduplicare il codice per i miei primitivi test di unità T-SQL. Un vero quadro di test unitario sarebbe meglio, ma questo è meglio di niente e "garbage collection" da solo.

+2

E per quanto riguarda le funzioni? Per poterli utilizzare nelle espressioni SELECT COLUMN? – jgomo3

Problemi correlati