条件中的T-SQL USE语句

时间:2013-08-10 08:48:17

标签: sql-server sql-server-2008 stored-procedures

似乎USE语句是由MS SQL Server 2008R2编译的。

例如,

if(1=0)
begin
   USE MyDB
end

结果将在执行USE MyDB时忽略IF语句。

如何改变它以适应条件?

P.S。同样尝试execute sp_executesql N'USE [MyDB]',它适用于条件,但它不会改变当前上下文。

3 个答案:

答案 0 :(得分:1)

以这种方式尝试使用动态SQL:

EXEC ('USE [MyDB];')

答案 1 :(得分:1)

确实,在运行时更改数据库的正确方法恰恰是动态SQL,在实际执行之前不会对其进行编译或验证。您的示例,涉及sp_executesql的失败代码实际上是在改变上下文,但问题是更改对于动态SQL批处理而言只是 ,而不是在调用代码上。要实际查看和使用该数据库,必须将更多代码放在内部动态SQL块中,并由EXEC / sp_executesql立即执行:

USE master ;
EXEC (N'USE tempdb ; PRINT db_name() ;') ;
PRINT db_name() ;

如果你绝对需要做那个动态数据库切换,我认为你可以重构脚本,使它只构建一个包含要运行的命令的字符串,而1=0条件只会预先设置一个正确的USE }语句选择要使用的数据库。

答案 2 :(得分:1)

当您需要条件“使用MyDB”时,我会查看sqlcmd和变量。

Use $(DatabaseName) 
GO 

这是我找到“动态”使用MyDatabase名称的唯一方法。

参考文章:

technet.microsoft.com/en-us/library/ms188714.aspx