Ciao a tutti,
sono alle prese con una stored procedure in cui vorrei creare ed utilizzare una tabella temporanea locale. Ho scelto una local temporary table perchè:
-
Verrà eliminata automaticamente da SQL Server al termine della stored procedure
-
SQL Server sarà in grado di distinguere le tabelle create da differenti utenti (esecuzioni contemporanee da parte di più utenti)
Esempio semplificato:
IF
OBJECT_ID('USP_TestTmpTable') IS NOT NULL DROP PROCEDURE dbo.USP_TestTmpTable
GO
CREATE
PROCEDURE dbo.USP_TestTmpTable
AS
BEGIN
DECLARE @sSQL varchar(8000), @sTraceFile varchar(255)
SET @sTraceFile = 'C:\' EXEC master..xp_sprintf @sSQL OUTPUT, 'DIR "%s*.*" /ODN /B', @sTraceFile
EXEC ('CREATE ' + 'TABLE #tmpFiles (f_id int IDENTITY, [filename] varchar(255))') INSERT #tmpFiles EXEC master..xp_cmdshell @sSQL
SELECT f_id, [filename] FROM #tmpFiles
END
Purtroppo

non posso modificare il comando di creazione della tabella temporanea
#tmpFiles: EXEC ('CREATE ' + 'TABLE #tmpFiles (f_id int IDENTITY, [filename] varchar(255))'). La CREATE TABLE deve essere mantenuta all'interno di una stringa... per non piangere non vi sto a spiegare i motivi.
Se tento di eseguire la stored procedure con EXEC dbo.USP_TestTmpTable ricevo il seguente messaggio di errore:
Msg 208, Level 16, State 0, Procedure USP_TestTmpTable, Line 18
Invalid object name '#tmpFiles'.
La tabella temporanea creata con EXEC(...) non è visibile all'interno di USP_TestTmpTable.
Utilizzando una tabella temporanea globale la stored procedure viene eseguita correttamente, ma non so se potrò avere problemi nel caso di esecuzioni contemporanee da parte di più utenti. Avevo pensato anche di concatenare il contenuto della variabile @@SPID al nome della tabella temporanea globale...
Avete qualche consiglio/suggerimento da darmi ?
Grazie, ciao
Sergio