【发布时间】:2021-02-03 20:35:07
【问题描述】:
我正在尝试根据 IF NOT EXISTS 条件执行脚本。但是,即使 IF NOT EXISTS 返回 1,BEGIN 和 END 中的块也会执行。我无法更改 BEGIN 和 END 块中的语句。这种情况如何处理?
IF NOT EXISTS(SELECT 1 FROM [dbo].[UPGRADEHISTORY] WHERE SCRIPTNAME='001-MarkSubmitted.sql' AND RELEASENUMBER= '1')
BEGIN
IF NOT EXISTS(SELECT 1 FROM [dbo].[Action] WHERE Name='mark As Submitted')
BEGIN
SET IDENTITY_INSERT [dbo].[Action] ON
INSERT INTO [dbo].[Action](Id,Name,CreatedBy,CreatedOn) VALUES (6,'mark As Submitted',1,getdate())
SET IDENTITY_INSERT [dbo].[Action] OFF
END
GO
INSERT INTO [dbo].[StatusActionMapping](ArtifactType,StatusId,ActionId,RoleId) VALUES ('Report',11,6,1)
GO
INSERT INTO [dbo].[UpgradeHistory] ([ReleaseNumber],[ScriptNumber],[ScriptName],[ExecutionDate]) VALUES (1, (SELECT FORMAT(MAX(SCRIPTNUMBER) + 1, 'd3') FROM UpgradeHistory WHERE ReleaseNumber= 1),'001-MarkSubmitted.sql',GETDATE());
END
GO
【问题讨论】:
-
GO不是 T-SQL 运算符,它被 IDE/CLI 解释为批处理分隔符。如果您不想将语句分成单独的批次(显然在这里您不想),请不要将GOs 放在那里。解决方案很简单,通过删除它们来修复你的代码,因为如果你要将它们分成真正的单独批次(即单独的文件),那么你所拥有的语法是无效的。 -
我无法删除 BEGIN 和 END 块中的 GO 语句。问题是即使 NOT EXISTS 为 1 也会执行语句
-
“我不能删除 BEGIN 和 END 块中的 GO 语句。” 为什么不呢?为什么要在
BEGIN...END的中间分开一个批次?
标签: sql sql-server