Est-il nécessaire d'utiliser # pour créer des tables temporaires dans SQL Server?

91

Est-il nécessaire d'utiliser #avant de créer une table temporaire dans SQL Server?

Exemple:

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

Pour ItemBack1, est-il nécessaire d'utiliser le #symbole?

Sinon, à quoi sert la #création de tables temporaires?

Arun CM
la source
3
Oui. # crée une table temporaire. Sans cela crée une table.
Jeow Li Huan

Réponses:

151

Oui. Vous devez préfixer le nom de la table avec "#" (hachage) pour créer des tables temporaires.

Si vous n'avez PAS besoin du tableau plus tard, continuez et créez-le. Les tables temporaires ressemblent beaucoup aux tables normales. Cependant, il est créé dans tempdb. De plus, il n'est accessible que via la session en cours, c'est-à-dire pour EG: si un autre utilisateur tente d'accéder à la table temporaire que vous avez créée, il ne pourra pas le faire.

"##" (le double-hachage crée une table temporaire "globale" qui peut également être accédée par d'autres sessions.

Reportez-vous au lien ci-dessous pour les bases des tables temporaires: http://www.codeproject.com/Articles/42553/Quick-Overview-Temporary-Tables-in-SQL-Server-2005

Si le contenu de votre table est inférieur à 5000 lignes et ne contient PAS de types de données tels que nvarchar (MAX), varbinary (MAX), envisagez d'utiliser des variables de table.

Ils sont les plus rapides car ils sont comme toutes les autres variables qui sont stockées dans la RAM. Ils sont également stockés dans tempdb, pas dans la 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;

Plus d'informations sur les variables de table: http://odetocode.com/articles/365.aspx

mobiledaemon
la source
11
Dans SQL Server, la syntaxe SELECT est INSERT INTO @ ItemBack1 SELECT colonne1, colonne2, someInt, someVarChar FROM table2 WHERE table2.ID = 7
mhenry1384
8
Les tables de variables ne sont pas stockées dans la RAM, elles sont également stockées dans tempdb. Je recommanderais de ne pas utiliser de variables de table à moins que vous ne compreniez certains de leurs inconvénients, car leurs nombres de lignes sont automatiquement définis sur un et de mauvais plans peuvent en résulter.
ConstantineK
Pouvez-vous donner une source pour les 5000 lignes, restrictions nvarchar (max), varbinary (max)? C'est autorisé, mais je ne sais pas pourquoi ce n'est pas recommandé.
Brad
1
Moi aussi, je pensais que les variables de table étaient stockées en mémoire. Je suis corrigé: dba.stackexchange.com/a/16386/23720
Baodad
1
Je vais seulement commenter aussi que c'est un fait que les variables de table sont stockées dans tempdb. Je fais des commentaires, alors peut-être que PLUS de gens lisent les commentaires et les intègrent, car je suis tellement fatigué d'entrer dans un joint en tant que consultant principal pour avoir à discuter avec un employé à temps plein qui est ignorant et essaie de dire le contraire. Je parle de dizaines d'entreprises du Fortune 500, si heureux de voir les gens commenter. Tristement, à moins que ce PO qui répond à la question MODIFIE réellement leur réponse, nous continuerons à avoir cet ignorant persistant pendant une autre décennie environ.
Tom Stickel
14

La différence entre ces deux tables ItemBack1et #ItemBack1est que la première sur est persistante (permanente) alors que l'autre est temporaire.

Maintenant, jetez un œil à votre question à nouveau

Est-il nécessaire d'utiliser # pour créer une table temporaire dans le serveur SQL?

La réponse est Oui , car sans cela, #la table ne sera pas une table temporaire, elle sera indépendante de toutes les sessions et étendues.

zzlalani
la source