无法在批处理中设置IDENTITY_INSERT

8

案例

目前我正在编写数据库种子脚本,使用 sqlcmd 执行。例如,这个脚本示例:

IF (SELECT COUNT(*) FROM Genders)=0
BEGIN
   PRINT N'Seeding table Genders...'

   SET IDENTITY_INSERT Genders ON
   GO

   INSERT INTO Genders (GenderId, Description) VALUES (0, 'Onbekend');
   INSERT INTO Genders (GenderId, Description) VALUES (1, 'Vrouw');
   INSERT INTO Genders (GenderId, Description) VALUES (2, 'Man');
   INSERT INTO Genders (GenderId, Description) VALUES (3, 'Onzijdig');
   INSERT INTO Genders (GenderId, Description) VALUES (4, 'Vrouwman');
   INSERT INTO Genders (GenderId, Description) VALUES (5, 'Manvrouw');

   SET IDENTITY_INSERT Genders OFF
END
GO
问题

然而,如果我在SQL Server Management Studio中使用sqlcmd模式执行它,会出现以下错误:

Msg 102, Level 15, State 1, Line 5 Incorrect syntax near 'ON'.

Msg 102, Level 15, State 1, Line 10 Incorrect syntax near 'END'.

我谷歌了一些,但是无法找出我做错了什么。如果没有IF/BEGIN/END,它可以正常工作,但我想先进行检查。

问题:
  • 我做错了什么吗?
  • 如果不可能,有任何可用的解决方法吗?

提前感谢!!


3
在执行 set identity_insert (...) 后移除GO。 - Nikola Markovinović
1
没有 GO 会工作吗? - red-X
哦,那真是愚蠢...现在它确实可以工作了,为什么GO现在不必要了呢? - Herman Cordes
不要忘记重新设置标识值:DBCC CHECKIDENT(Genders,RESEED,5) - Nikola Markovinović
1
GO是批处理分隔符。IF ... BEGIN缺少END,在第二部分中END被孤立。 - Nikola Markovinović
显示剩余2条评论
1个回答

6

BEGINEND之间不能使用GO。请尝试以下操作:

SET IDENTITY_INSERT Genders ON

IF (SELECT COUNT(*) FROM Genders)=0
BEGIN
   PRINT N'Seeding table Genders...'

   INSERT INTO Genders ...

END

SET IDENTITY_INSERT Genders OFF
GO

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接