Sintaxis incorrecta cerca de ‘IR’

¿Cómo puedo ejecutar el siguiente SQL dentro de un único comando (ejecución única) a través de ADO.NET?

ALTER TABLE [MyTable] ADD NewCol INT GO UPDATE [MyTable] SET [NewCol] = 1 

El separador de lotes GO no es compatible, y sin él la segunda statement falla.

¿Hay alguna otra solución a esto que no sea el uso de múltiples ejecuciones de command ?

La palabra clave GO no es T-SQL, sino un artefacto de SQL Server Management Studio que le permite separar la ejecución de un archivo de script en varios lotes. Cuando ejecuta un archivo de script T-SQL en SSMS, las declaraciones se ejecutan en lotes. separados por la palabra clave GO . Puede encontrar más detalles aquí: https://msdn.microsoft.com/en-us/library/ms188037.aspx

Si lees eso, verás que sqlcmd y osql también son compatibles con GO .

SQL Server no entiende la palabra clave GO . Entonces, si necesita un equivalente, necesita separar y ejecutar los lotes individualmente por su cuenta.

Eliminar el GO :

 String sql = "ALTER TABLE [MyTable] ADD NewCol INT;"; cmd = new SqlCommand(sql, conn); cmd.ExecuteNonQuery(); sql = "UPDATE [MyTable] SET [NewCol] = 1"; cmd = new SqlCommand(sql, conn); cmd.ExecuteNonQuery(); 

Parece que puedes usar la clase Server para eso. Aquí hay un artículo:

C #: Ejecución de secuencias de comandos T-SQL por lotes que contienen instrucciones GO

También obtendrá este error si ha utilizado declaraciones IF y las cerró incorrectamente.

Recuerde que debe usar BEGIN / END si su instrucción IF es más larga que una línea.

Esto funciona:

 IF @@ROWCOUNT = 0 PRINT 'Row count is zero.' 

Pero si tienes dos líneas, debería verse así:

 IF @@ROWCOUNT = 0 BEGIN PRINT 'Row count is zero.' PRINT 'You should probably do something about that.' END 

Esto también puede suceder cuando su separador de lote ha sido cambiado en su configuración. En SSMS, haga clic en Herramientas -> Opciones y vaya a Ejecución de consulta / Servidor SQL / General para verificar ese separador de lotes.

Acabo de tener este error con un script que no tenía terminaciones de línea CR LF. Cerrar y volver a abrir el script parece provocar una solución. ¡Solo otra cosa para verificar!

Me encontré con esto tratando de determinar por qué mi consulta no funcionaba en SSRS. No use GO en SSRS, en su lugar use punto y coma entre sus diferentes declaraciones.