Невозможно установить IDENTITY_INSERT в пакете - PullRequest
5 голосов
/ 22 марта 2012

Case

В настоящее время я работаю над сценарием заполнения базы данных, выполняемым с 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

Проблема

Однако, если я выполню его в режиме sqlcmd в SQL Server Management Studio, он выдаст мне эти ошибки:

Сообщение 102, уровень 15, состояние 1, строка 5 Неправильный синтаксис рядом с «ON».

Сообщение 102, уровень 15, состояние 1, строка 10 Неправильный синтаксис рядом с «END»'.

Погуглил некоторых, но не могу понять, что я делаю не так.Без IF / BEGIN / END, если работает, но я хотел бы сначала выполнить проверку.

Вопросы:

  • Что-то я делаю не так?
  • Если это невозможно, есть ли обходной путь?

Заранее спасибо !!

1 Ответ

5 голосов
/ 22 марта 2012

Вы не можете иметь GO в пределах BEGIN и END.Попробуйте следующее

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
...