IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = N'model')
BEGIN
GOTO CREATESCEDB;
END
ELSE
BEGIN
GOTO UPDATESCEDB;
END
CREATESCEDB:
PRINT 'Create'
USE [master]
GO
CREATE DATABASE [model]
GO
GOTO ENDOFSCRIPT
UPDATESCEDB:
PRINT 'Update'
GOTO ENDOFSCRIPT
ENDOFSCRIPT:
PRINT 'END'
在上面的sql查询中,如果我删除
USE [master]
GO
CREATE DATABASE [model]
GO
然后它可以正常工作,否则不行。
USE [master]
GO
CREATE DATABASE [model]
GO
查询中的始终运行CREATE DATABASE [model]
。不知道为什么。
答案 0 :(得分:1)
GOTO
不会批量生效。 GO
关键字终止批处理。就像你有不同的脚本,即:
IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = N'model')
BEGIN
GOTO CREATESCEDB;
END
ELSE
BEGIN
GOTO UPDATESCEDB;
END
CREATESCEDB:
PRINT 'Create'
USE [master]
GO
CREATE DATABASE [model]
GO
GOTO ENDOFSCRIPT
UPDATESCEDB:
PRINT 'Update'
GOTO ENDOFSCRIPT
ENDOFSCRIPT:
PRINT 'END'
所以你可以跳到CREATESCEDB
而不是更进一步。你应该看到错误:
Msg 133,Level 15,State 1,Line 1 GOTO声明引用了 标签'UPDATESCEDB'但标签尚未声明。
答案 1 :(得分:0)
https://meta.stackexchange.com/q/185681
根据您对建议的替代请求的回应,语法可能会使用sp_executesql
IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = N'model')
BEGIN
EXEC dbo.sp_executesql @statement = N'
USE master;
CREATE DATABASE [model];'
END
ELSE
BEGIN
PRINT 'Update';
END