2011-03-25 91 views
0

我在SQL Server中有多个数据库。并且诸如“Database1”,“Database1_Tmp”,“Database2”,“Database2_Tmp”等的数据库设计例如是“ 和我的sql命令我想执行当前数据库的命令和选定数据库的tmp对上的一些命令。在SQL Server中运行生成的使用DB命令

我写了一个SQL查询,如下,但它给我一个错误

附近有语法错误@db_Blobname“。

如何写一个命令到当前dB变化,运行命令

感谢

.......... 
---command for DatabaseX 
........................ 
--trying to change current DatabaseX to DatabaseX_Tmp to run command on 
    DECLARE @db_Blobname VARCHAR(255) 
    SET @db_Blobname = (SELECT DB_NAME()) 
    SET @db_Blobname = @db_Blobname+ '_Tmp' 
    PRINT @db_Blobname 
    USE @db_Blobname 
    GO 
............ 

回答

2

您可以使用execsp_executesql做你想做什么。但要小心:仅将USE包装在动态SQL中是不够的。你必须在这个动态的sql调用中封装你想在其他数据库上完成的所有语句。 引用来自exec页面:

数据库上下文中的更改只会持续到EXECUTE语句结束。例如,在这个例子中,EXEC后,数据库环境是主:

使用母版EXEC(“USE酒吧”)SELECT * FROM作者

所以,你的代码看起来是这样的,假设你有在你的数据库中的表“富”:

DECLARE @db_Blobname VARCHAR(255) 
DECLARE @stmnt VARCHAR(8000) 
SET @db_Blobname = (SELECT DB_NAME()) 
SET @db_Blobname = @db_Blobname+ '_Tmp' 
SET @stmnt = 'USE '[email protected]_Blobname+'; SELECT * FROM foo' 
EXEC (@stmnt) 
GO 
+0

喂thnks你的答案..我已经厌倦了片段,但它给错误为“无效的对象名称SampleTable'” ... – dankyy1 2011-03-25 08:21:46

+0

哪段?请发布代码。 – 2011-03-25 08:23:44

+0

这里是我试过的代码片段........ DECLARE @db_Blobname VARCHAR(255)SET @db_Blobname =(SELECT DB_NAME())SET @db_Blobname = @ db_Blobname +'_Tmp'PRINT @db_Blobname USE master EXEC('USE '+ @ db_Blobname)SELECT TOP 1 ID FROM SampleTable – dankyy1 2011-03-25 08:42:53

相关问题