È necessario utilizzare # per creare tabelle temporanee in SQL server?


91

È necessario utilizzare #prima di creare una tabella temporanea in SQL server?

Esempio:

SELECT column1, column2, someInt, someVarChar 
INTO ItemBack1 
FROM table2
WHERE table2.ID = 7

Per ItemBack1 è necessario utilizzare il #simbolo?

In caso contrario, a cosa serve #creare tabelle temporanee?


3
Sì. # crea una tabella temporanea. Senza crea un tavolo.
Jeow Li Huan

Risposte:


151

Sì. È necessario anteporre il nome della tabella con "#" (hash) per creare tabelle temporanee.

Se NON hai bisogno della tabella in seguito, vai avanti e creala. Le tabelle temporanee sono molto simili alle normali tabelle. Tuttavia, viene creato in tempdb. Inoltre, è accessibile solo tramite la sessione corrente, ad es. Per EG: se un altro utente tenta di accedere alla tabella temporanea creata da te, non sarà in grado di farlo.

"##" (il doppio hash crea una tabella temporanea "globale" a cui possono accedere anche altre sessioni.

Fare riferimento al collegamento sottostante per le basi delle tabelle temporanee: http://www.codeproject.com/Articles/42553/Quick-Overview-Temporary-Tables-in-SQL-Server-2005

Se il contenuto della tabella è inferiore a 5000 righe e NON contiene tipi di dati come nvarchar (MAX), varbinary (MAX), prendere in considerazione l'utilizzo di variabili di tabella.

Sono le più veloci in quanto sono come tutte le altre variabili memorizzate nella RAM. Sono archiviati anche in tempdb, non nella RAM .

DECLARE @ItemBack1 TABLE
(
 column1 int,
 column2 int,
 someInt int,
 someVarChar nvarchar(50)
);

INSERT INTO @ItemBack1
SELECT column1, 
       column2, 
       someInt, 
       someVarChar 
  FROM table2
 WHERE table2.ID = 7;

Ulteriori informazioni sulle variabili di tabella: http://odetocode.com/articles/365.aspx


11
In SQL Server, la sintassi SELECT è INSERT INTO @ ItemBack1 SELECT column1, column2, someInt, someVarChar FROM table2 WHERE table2.ID = 7
mhenry1384

8
Le tabelle delle variabili non vengono archiviate nella RAM, ma anche in tempdb. Suggerirei di non utilizzare le variabili di tabella a meno che non si comprendano alcuni dei loro svantaggi, poiché i loro conteggi di righe vengono impostati automaticamente su uno e possono verificarsi piani errati.
ConstantineK

Potete fornire una fonte per le 5000 righe, restrizioni nvarchar (max), varbinary (max)? Questo è consentito, ma non sono sicuro del motivo per cui non è raccomandato.
Brad

1
Anch'io pensavo che le variabili di tabella fossero archiviate in memoria. Sono stato corretto: dba.stackexchange.com/a/16386/23720
Baodad

1
Ho solo intenzione di commentare anche che è un fatto che le variabili di tabella sono memorizzate in tempdb. Sto commentando quindi forse PIÙ persone leggono i commenti e lo mettono in testa perché sono così stanco di entrare in un comune come consulente senior per dover discutere con un dipendente a tempo pieno che è ignorante e cerca di dire il contrario. Sto parlando di dozzine di aziende in Fortune 500, quindi sono felice di vedere le persone commentare. Sfortunatamente, a meno che questo OP che risponde alla domanda non MODIFICHI effettivamente la risposta, continueremo a far persistere questo ignorante per un altro decennio circa.
Tom Stickel

14

La differenza tra queste due tabelle ItemBack1ed #ItemBack1è che la prima è persistente (permanente) mentre l'altra è temporanea.

Ora, dai un'occhiata di nuovo alla tua domanda

È necessario utilizzare # per creare una tabella temporanea in sql server?

La risposta è , perché senza questo precedente #la tabella non sarà una tabella temporanea, sarà indipendente da tutte le sessioni e gli ambiti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.