2015-07-14 1 views
0

Dans SSMS, je peux créer une variable temp globale dans un lot et l'utiliser dans un autre. Comme ceci:Tables temporaires globales avec SQLCMD

CREATE TABLE ##temp (col1 INT) 
GO 

DROP TABLE ##temp 
GO 

Avec SQLCMD, je crée une table temporaire globale dans un appel et il n'existe pas dans le second.

sqlcmd -S localhost -d tempdb -E -Q "create table ##temp (col1 int)" 

sqlcmd -S localhost -d tempdb -E -Q "drop table ##temp" 
Msg 3701, Level 11, State 5, Server VATLLXT7LGBARE2, Line 1 
Cannot drop the table '##temp', because it does not exist or you do not have permission. 

Une table temporaire globale n'est-elle pas supposée rester tant que le serveur n'est pas réinitialisé?

+0

Il colle jusqu'à ce que vous, ou quiconque l'utilise en dernier, se déconnecte. SSMS est différent car la connexion est généralement persistante lorsque l'éditeur de requête est ouvert; SQLCMD se connecte et se déconnecte à chaque invocation. –

+0

Il est également possible de créer des tables normales dans tempdb, et celles-ci ne sont pas supprimées automatiquement –

Répondre

2

Oui c'est correct parce que la table temporaire globale existe dans la connexion/session qui l'a créée et est supprimée automatiquement si la connexion se ferme. Dans votre cas, tout d'abord SQLCMD crée la table

sqlcmd -S localhost -d tempdb -E -Q "create table ##temp (col1 int)" 

Et la connexion ferme qui laisse tomber la table temporaire et donc dans la prochaine connexion, il n'existe plus

sqlcmd -S localhost -d tempdb -E -Q "drop table ##temp" 
+1

"si la connexion se ferme" [et si personne d'autre n'utilise cette table] (https://technet.microsoft.com/fr-fr/ library/ms177399 (v = sql.105) .aspx) –