none
Tabelle Temporanee create in una Procedura RRS feed

  • 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
    GO

    Come 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 #TempTable

    ottengo questo errore Invalid object name '#TempTable'


    • Modificato AngeloNew martedì 19 giugno 2012 15:21
    martedì 19 giugno 2012 15:19

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
    martedì 19 giugno 2012 15:40

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
    martedì 19 giugno 2012 15:40
  • Ciao Angelo,

    Grazie a te per averci fatto sapere come hai risolto!

    Saluti,


    Anca Popa Follow ForumTechNetIt on Twitter

    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. 

    venerdì 22 giugno 2012 09:08
  • 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


    END

    la lancio prima della selezione dati, ma la tabella non viene creata...

    martedì 16 gennaio 2018 09:06
  • mercoledì 17 gennaio 2018 16:02
    Moderatore
  • Come ti ha consigliato Edoardo controlla la documentazione ed il funzionamento delle variabili tabella.

    QuirinoS

    giovedì 18 gennaio 2018 16:06