2012-03-22 14 views
5

CasoNo se puede establecer IDENTITY_INSERT en lotes

Actualmente estoy trabajando en el guión de la siembra de la base de datos, ejecutado con sqlcmd. Por ejemplo, este script de ejemplo:

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 

Problema

Sin embargo, si ejecuto con sqlcmd el modo en SQL Server Management Studio, me da este error:

Msg 102, Nivel 15, estado 1, línea 5 Sintaxis incorrecta cerca de 'ON'.

Msg 102, nivel 15, estado 1, línea 10 Sintaxis incorrecta cerca de 'END'.

Hago búsquedas en Google, pero no puedo entender lo que estoy haciendo mal. Sin IF/BEGIN/END si funciona, pero me gusta realizar primero el control.

Preguntas:

  • Cualquier cosa que estoy haciendo mal?
  • De ser imposible, ¿hay alguna solución disponible?

Gracias de antemano !!

+3

Quitar ir después identity_insert conjunto (...) –

+1

¿Funciona sin el 'GO'? –

+0

Oh, eso fue estúpido ... funciona ahora, ¿por qué no es necesario el GO ahora? –

Respuesta

5

No puede tener GO dentro de BEGIN y END. Trate de seguir

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 
Cuestiones relacionadas