web-dev-qa-db-fra.com

Deux sessions peuvent-elles créer des tables #temp avec le même nom?

Je crée une table temporaire (#myTable) et à l'aide d'un curseur. Cela crée-t-il un problème lorsque des utilisateurs simultanés accèdent au curseur via mon application? Est-ce que cela me permet de créer des tables temporaires distinctes avec le même nom?

Voici l'exemple de code:

Open cursor;
Fetch Next from cursor into @Variable_Temp_Table_Name;
Create table #myTable(pk int)
While @@Fetch_Status = 0
Begin    
Fetch Next from cursor into @Variable_Temp_Table_Name;
End 
17
sujith karivelil

Le serveur SQL ajoute toujours un nombre aléatoire à la fin d'un nom de table temporaire (en arrière-plan), lorsque les utilisateurs simultanés créent des tables temporaires dans leurs sessions avec le même nom, SQL Server créera plusieurs tables temporaires dans la tempdb.

J'ai créé 3 tables temporaires appelées #TempTable dans trois sessions différentes dans mon SSMS, maintenant si je vais dans tempdb, je peux voir les tables temporaires qui y sont créées avec une chaîne aléatoire (unique) ajoutée au nom de chaque table temporaire.

enter image description here

20
M.Ali

Oui, plusieurs applications obtiendront leurs propres copies de la table #temp. C'est le point d'utiliser une table #temp, car chaque session simultanée a son propre objet isolé. Cela n'a rien à voir avec si vous utilisez un curseur en combinaison avec votre table #temp (bien que je soupçonne que le curseur n'est pas nécessaire de toute façon - vous n'avez pas inclus suffisamment de code pour commenter spécifiquement).

Modifier pour inclure un commentaire:

Une autre chose à propos de l'utilisation des tables #temp est que si vous avez besoin d'y ajouter des contraintes, laissez SQL Server générer le nom sinon, même si la table sera unique à la session, la contrainte ne le sera pas et la seconde instance générera une erreur lors de la création de la table.

11
Aaron Bertrand