Les tables SQL Server: quelle est la différence entre le @, # et ##?
Dans SQL Server, quelle est la différence entre une @ table, un # table et un ## table?
Vous devez vous connecter pour publier un commentaire.
Dans SQL Server, quelle est la différence entre une @ table, un # table et un ## table?
Vous devez vous connecter pour publier un commentaire.
#table
fait référence à un local (visible uniquement à l'utilisateur qui l'a créé) table temporaire.##table
se réfère à un mondial (visible par tous les utilisateurs) table temporaire.@variableName
fait référence à une variable qui peut contenir des valeurs en fonction de son type.Ont un coup d'oeil à
et Leur Effet sur SQL Server
Performance
temporaire et des tables de
les variables
Quand Utiliser Quoi Et Pourquoi
#
et##
tables sont des tables réelles représentées dans le temp de base de données. Ces tables peuvent avoir des index et des statistiques, et peut être consulté à travers sprocs dans une session (dans le cas d'un mondial de la table temporaire, il est disponible à travers des sessions).L' @tableau est une variable de table.
Pour plus d': http://www.sqlteam.com/article/temporary-tables
Je mettrait l'accent sur les différences entre le n ° de la table et @table. ##table est une table temporaire globale et pour le record de plus de 10 ans d'utilisation de SQL Server, je n'ai pas encore rencontré un valide de cas d'utilisation. Je suis sûr que certains d'exister, mais la nature de l'objet, il est très inutilisable à mon humble avis.
La réponse à @geignard par @marc_s est tout à fait vrai: c'est un mythe répandu que les variables de table de vivre toujours dans la mémoire. Il est en fait assez commun pour une variable de table pour aller sur le disque et de fonctionner comme une table temp.
De toute façon, je suggère la lecture sur l'ensemble des différences en suivant les liens souligné par @Astander. La plupart de la différence impliquent des restrictions sur ce que vous ne pouvez pas faire avec @table de variables.
Crée une table qui n'est visible que sur et lors de la CONNEXION
le même utilisateur qui crée une autre connexion ne sera pas en mesure de voir le tableau #t de l'autre connexion.
Crée une table temporaire visible pour les autres connexions. Mais la table est supprimée lors de la création de la connexion est terminée.
SqlConnection.Open()
avec le même chaîne de connexion est Le CONNEXION ?si vous avez besoin d'un mondial unique de la table temporaire de, créer votre propre avec un Uniqueidentifier Préfixe/Suffixe et déposer des postes d'exécution si un si object_id(.... Le seul inconvénient est l'aide de sql Dynamique et avoir besoin d'abandonner explicitement.