web-dev-qa-db-fra.com

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

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, quelle est l'utilisation de # dans la création de tables temporaires?

90
Arun CM

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

Si vous n'avez PAS besoin de la table plus tard, allez-y et créez-la. 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 créée par vous, il ne pourra pas le faire.

"##" (double-hash crée une table temporaire "globale" à laquelle d'autres sessions peuvent également accéder.

Reportez-vous au lien ci-dessous pour obtenir 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 à 5 000 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 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

150
mobiledaemon

La différence entre ces deux tables ItemBack1 et #ItemBack1 est que la première est persistante (permanente), l’autre étant temporaire.

Maintenant si relisez votre question

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

La réponse est Yes, car sans cela précédant #, la table ne sera pas une table temporaire, elle sera indépendante de toutes les sessions et de toutes les portées.

14
zzlalani