设置NOEXEC ON仍然执行“USE”语句

时间:2016-07-12 02:47:56

标签: sql-server tsql ssms

在SSMS中执行以下操作时;

if not exists (select * from sys.databases where name = 'SWFUAT')
begin
    print 'The UAT database (SWFUAT) does not exist...'
    set noexec on;
end
go

use SWFUAT;
go

显示以下内容;

  

UAT数据库(SWFUAT)不存在...
      Msg 911,Level 16,State 1,Line 20
      数据库'SWFUAT'不存在。确保正确输入名称。

编译器不应该忽略“use”语句吗?

1 个答案:

答案 0 :(得分:2)

如果我理解你的问题,那么你想要执行

use SWFUAT;
仅当SWFUAT数据库存在时

不幸的是因为这句话

  

USE在编译和执行时执行,并立即生效。因此,在USE语句之后出现在批处理中的语句将在指定的数据库中执行。

描述here您无法在案例中使用SET NOEXEC。 要实现您的需求,您应该使用例如

替换代码
if not exists (select * from sys.databases where name = 'SWFUAT')
begin
    print 'The UAT database (SWFUAT) does not exist...' 
end else begin
    use SWFUAT;
end
go