Dans SQL Server, quelle est la différence entre une table @, une table # et une table ##?
Dans SQL Server, quelle est la différence entre une table @, une table # et une table ##?
Réponses:
#table
fait référence à une table temporaire locale (visible uniquement par l'utilisateur qui l'a créée).
##table
fait référence à une table temporaire globale (visible par tous les utilisateurs).
@variableName
fait référence à une variable qui peut contenir des valeurs en fonction de son type.
#
et les ##
tables sont des tables réelles représentées dans la base de données temporaire. Ces tables peuvent avoir des index et des statistiques, et peuvent être consultées à travers les sprocs dans une session (dans le cas d'une table temporaire globale, elle est disponible à travers les sessions).
La @table est une variable de table.
Pour en savoir plus: http://www.sqlteam.com/article/temporary-tables
Je me concentrerais sur les différences entre #table et @table. ## table est une table temporaire globale et pour mémoire, en plus de 10 ans d'utilisation de SQL Server, je n'ai pas encore rencontré de cas d'utilisation valide. Je suis sûr que certains existent mais la nature de l'objet le rend hautement inutilisable à mon humble avis.
La réponse à @whiner par @marc_s est absolument vraie: c'est un mythe répandu que les variables de table vivent toujours en mémoire. Il est en fait assez courant pour une variable de table d'aller sur le disque et de fonctionner comme une table temporaire.
Quoi qu'il en soit, je suggère de lire l'ensemble des différences en suivant les liens indiqués par @Astander. La plupart des différences impliquent des limitations sur ce que vous ne pouvez pas faire avec les variables @table.
CREATE TABLE #t
Crée une table qui n'est visible que sur et pendant cette CONNEXION, le même utilisateur qui crée une autre connexion ne pourra pas voir la table #t de l'autre connexion.
CREATE TABLE ##t
Crée une table temporaire visible par les autres connexions. Mais la table est supprimée lorsque la connexion de création est terminée.
SqlConnection.Open()
avec la même chaîne de connexion est la même CONNEXION ?