Principale utente con più risposte
Tabelle Temporanee create in una Procedura

Domanda
-
Salve a tutti,
Ho una domanda da porre alla vostra attenzione:
in una procedura da me creata, Kng_test, creo una tabella temporanea,
precisamente :
CREATE PROCEDURE Kng_Test
AS
BEGIN
CREATE TABLE #TempTable(Field1 int, Field2 varchar(10))
INSERT INTO #TempTable(Field1, Field2) VALUES (42, 'Alberto')
SELECT * FROM #TempTable
END
GOCome mai eseguendo la procedura e poi facendo una select sulla tabella, ottengo un messaggio d'errore
che mi dice che la tabella non esiste?
precisamente, facendo questo :
EXEC Kng_Test
USE Tempdb
go
SELECT * FROM #TempTableottengo questo errore Invalid object name '#TempTable'
- Modificato AngeloNew martedì 19 giugno 2012 15:21
Risposte
-
Scusate, ho risolto da me,
la risposta:
anteponendo il simbolo cancelletto al nome della tabella, la tabella temporanea viene
creata nel database TempDB come tabella temporanea locale, il che significa
che questa tabella vive solo all'interno della stored, terminata la stored la tabella
verrà cancellata in automatico da SQL SERVER.Questo tipo di tabelle sono anche specifiche
per la connessione, dunque, aprendo una connessione diversa allo stesso server, saranno ugualmente inesistenti.
Esistono anche le tabelle temporanee permanenti, che durano oltre il ciclo di vita della stored e che sono
visibili da qualunque connessione al server SQL.
Il nome di queste tabella va fatto precedere da ## (esempio ##TestTable).
grazie lo stesso
- Contrassegnato come risposta AngeloNew martedì 19 giugno 2012 15:41
Tutte le risposte
-
Scusate, ho risolto da me,
la risposta:
anteponendo il simbolo cancelletto al nome della tabella, la tabella temporanea viene
creata nel database TempDB come tabella temporanea locale, il che significa
che questa tabella vive solo all'interno della stored, terminata la stored la tabella
verrà cancellata in automatico da SQL SERVER.Questo tipo di tabelle sono anche specifiche
per la connessione, dunque, aprendo una connessione diversa allo stesso server, saranno ugualmente inesistenti.
Esistono anche le tabelle temporanee permanenti, che durano oltre il ciclo di vita della stored e che sono
visibili da qualunque connessione al server SQL.
Il nome di queste tabella va fatto precedere da ## (esempio ##TestTable).
grazie lo stesso
- Contrassegnato come risposta AngeloNew martedì 19 giugno 2012 15:41
-
Ciao Angelo,
Grazie a te per averci fatto sapere come hai risolto!
Saluti,
Microsoft offre questo servizio gratuitamente, per aiutare gli utenti e aumentare il database dei prodotti e delle tecnologie. Il contenuto viene fornito “così come è” e non comporta alcuna responsabilità da parte dell'azienda.
-
Buondì,
sto usando una tecnica similare, ma come mai se la procedura la lancio dal sql browser la tabella permane in memoria ed invece se schedulo la procedura o la lancio da codice c# non permane?
Ho fatto una procedura del tipo:
ALTER PROCEDURE [dbo].[PJP_AGGIORNATEMPDDT]
@DELETETABLE VARCHAR(2) ='NO'
AS
BEGIN
IF (OBJECT_ID('tempdb..##TempDDT') IS NULL)
BEGIN
SELECT [PJID_AZIENDA]
,[DO11_DATADOC]
,[DO11_CLIFOR_CG44]
,[DO30_CODART_MG66]
,[MG19_MACROCAT]
,[MG10_DESCRMACROCAT]
,[CERTISO9001]
,[CERTIATF]
,[CERTAMBSIC]
,[DESC_ART]
,[QTA]
,[PREZZOUNI]
,[PREZZOTOT]
,[NUM_LOTTI]
INTO ##TempDDT
FROM [BTOQAS_PM_DATI].[dbo].[PJV_DDT]
END
ELSE
BEGIN
IF(@DELETETABLE='SI')
BEGIN
TRUNCATE TABLE ##TempDDT
INSERT INTO ##TempDDT (
[PJID_AZIENDA]
,[DO11_DATADOC]
,[DO11_CLIFOR_CG44]
,[DO30_CODART_MG66]
,[MG19_MACROCAT]
,[MG10_DESCRMACROCAT]
,[CERTISO9001]
,[CERTIATF]
,[CERTAMBSIC]
,[DESC_ART]
,[QTA]
,[PREZZOUNI]
,[PREZZOTOT]
,[NUM_LOTTI]
)
SELECT [PJID_AZIENDA]
,[DO11_DATADOC]
,[DO11_CLIFOR_CG44]
,[DO30_CODART_MG66]
,[MG19_MACROCAT]
,[MG10_DESCRMACROCAT]
,[CERTISO9001]
,[CERTIATF]
,[CERTAMBSIC]
,[DESC_ART]
,[QTA]
,[PREZZOUNI]
,[PREZZOTOT]
,[NUM_LOTTI]
FROM [BTOQAS_PM_DATI].[dbo].[PJV_DDT]
END
END
ENDla lancio prima della selezione dati, ma la tabella non viene creata...
-
leggi qui
Edoardo Benussi
Microsoft MVP - Cloud and Datacenter Management
e[dot]benussi[at]outlook[dot]it -