看来USE语句是由MS SQL Server 2008R2编译的。
例如,
if(1=0)
begin
USE MyDB
end
结果将在执行中USE MyDB
同时忽略 IF 语句。
如何改变它以适应条件?
附:也尝试过execute sp_executesql N'USE [MyDB]'
,它适用于条件,但不会更改当前上下文。
事实上,在运行时更改数据库的正确方法正是动态 SQL,它在实际执行之前不会被编译或验证。您的示例,失败的代码涉及sp_executesql
事实上确实改变了环境,但问题是改变了生活only对于动态SQL批处理,不在调用代码上。要实际查看和使用该数据库,必须添加更多代码inside动态 SQL 块,并立即执行EXEC
/sp_executesql
:
USE master ;
EXEC (N'USE tempdb ; PRINT db_name() ;') ;
PRINT db_name() ;
如果您绝对需要进行动态数据库切换,我认为您可以重构脚本以使其仅构建包含要运行的命令的字符串,并且1=0
条件只在前面加上一个适当的USE
语句来选择要使用的数据库。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)