2009-06-01 7 views

Répondre

9

Malheureusement, non. Sauf si vous pouvez exécuter le reste de votre lot en tant que SQL dynamique.

En utilisant execute pour exécuter dynamiquement SQL va changer le contexte de la portée de la déclaration execute, mais ne laissera pas un effet durable sur la portée que vous exécutez l'instruction execute à partir.

En d'autres termes, ceci:

DECLARE @db VARCHAR(100) 
SET @db = 'SweetDB' 
EXECUTE('use ' + @db) 

ne placeront pas la base de données actuelle en permanence, mais si vous avez modifié le code ci-dessus comme ceci:

DECLARE @db VARCHAR(100) 
SET @db = 'SweetDB' 
EXECUTE('use ' + @db + ';select * from sysobjects') 
select * from sysobjects 

Ensuite, le résultat de ces deux requêtes seront être différent (en supposant que vous n'êtes pas déjà dans SweetDB), puisque le premier select, exécuté à l'intérieur execute s'exécute dans SweetDB, mais le second ne l'est pas.

0
declare @NewDB varchar(50) 
set @NewDB = 'NewDB' 
execute('use ' + @NewDB) 
+0

Selon la documentation (http://msdn.microsoft.com/en-us/library/ms188332.aspx), « Les changements dans le contexte de la dernière base de données jusqu'à ce que la fin de l'instruction EXECUTE. ", donc ce code est documenté comme ne donnant pas l'effet voulu. –

0

#TempTables se presist dans OGs

vous pouvez créer la table dans le premier lot, insérer/sélectionner les données que nécessaire ou que tout lot suivant.

Voici quelques exemple de syntaxe:

CREATE TABLE #YourTableName 
(
    col1 int   not null primary key identity(1,1) 
    ,col2 varchar(10) 
) 
Questions connexes