在SQL Server中运行生成的使用DB命令
问题描述:
我在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
............
答
您可以使用exec
或sp_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
喂thnks你的答案..我已经厌倦了片段,但它给错误为“无效的对象名称SampleTable'” ... – dankyy1 2011-03-25 08:21:46
哪段?请发布代码。 – 2011-03-25 08:23:44
这里是我试过的代码片段........ 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