Dans SQL Server, quelle est la différence entre une table @, une table # et une table ##?
sql-server
Craig Schwarze
la source
la source
Jettes un coup d'oeil à
la source
#
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
la source
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.
la source
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.
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.
la source
SqlConnection.Open()
avec la même chaîne de connexion est la même CONNEXION ?si vous avez besoin d'une table temporaire globale unique, créez la vôtre avec un préfixe / suffixe Uniqueidentifier et supprimez l'exécution de la publication si un if object_id (.... Le seul inconvénient est d'utiliser Dynamic sql et doit supprimer explicitement.
la source