Quelle est la différence entre: et p> dans SQL Server 2008? p> p> p>
4 Réponses :
C'est une très bonne référence sur les différentes tables Temps p>
Pour plus de détails, voir Ce sujet . p>
Les tables temporaires sont comme des tables ordinaires dans la plupart des caractéristiques, à l'exception d'elles entrent dans TEMPDB au lieu de la base de données actuelle, et ils disparaissent après une portée limitée (selon qu'ils sont des tables de session basées sur des sessions ou globales. Mais toutes les modifications apportées aux données Tableaux TEMP est connecté au journal des transactions, avec toutes les implications de performance qui implique. OTOH, vous pouvez également ajouter autant d'indices ou de vues, ou des déclencheurs, ou tout ce que vous souhaitez une table temporaire exactement comme vous le feriez à une table ordinaire. .
Les variables de table sont une sorte de table de mémoire courte (elles utilisent également Temp DB). Les modifications ne sont pas enregistrées (cela améliore les performances). Mais vous ne pouvez obtenir qu'un index sur eux (parce que les indices Ne peut pas être créé après la déclaration de déclaration initiale, le seul index que vous pouvez créer sur une variable de table est celui qui peut être inclus dans la déclaration de variable de la table initiale ... P>
Declare @Tab Table (myKey integer Primary Key Not Null, data varchar(20))
L'optimiseur suppose également qu'une variable de table a toujours exactement 1 rangée.
@erikkallen, ne savait pas ça; s'il vous plaît, référence?
"Vous ne pouvez obtenir qu'un index sur eux (parce que les indices ne peuvent pas être créés après la déclaration de déclaration initiale" - Qu'en est-il lorsque l'instruction de déclaration initiale comprend plus d'une construction logique connue pour créer physiquement un index par exemple contient deux < Code> Unique code> S: Declare @T Table (ID1 Integer Not NULL UNIQUE, ID2 INTEGER NON NULL UNIQUE); CODE> Ceci créera donc deux index, non?
Les modifications apportées à @Table_variables code> sont b> enregistrées.
Les variables de table ont une portée bien définie. Ils seront automatiquement effacés à la fin du lot (c'est-à-dire le lot d'instructions actuel) où comme une table temporaire sera visible pour la session actuelle et les procédures stockées imbriquées. La table temporaire mondiale sera visible pour toutes les sessions. P> li>
Les variables de table sont créées à l'aide de la déclaration de Declare. Nous ne pouvons pas créer une variable de table à l'aide de la déclaration p>
select * into #tempTableName
Dans SQL Server 2008, nous pouvons transmettre la variable de table en tant que paramètre sur les procédures stockées. Mais nous ne pouvons pas transmettre la table temporaire sous forme de paramètre à la procédure stockée. P> LI>
Nous pouvons utiliser la variable de table à l'intérieur de l'UDF (fonction définie par l'utilisateur), mais nous ne pouvons pas utiliser la table temporaire à l'intérieur de l'UDF. P> li> ol>
Ma réponse couvre ici ce tout de manière exhaustive
@Martin: une question géniale, et surtout la réponse. Merci!