在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
”语句吗?
答案 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