sql >> Base de Datos >  >> RDS >> Sqlserver

SQL Server Error 111:"... debe ser la primera declaración en un lote de consultas"

En SQL Server, un lote es un grupo de una o más declaraciones T-SQL enviadas al mismo tiempo desde una aplicación a SQL Server para su ejecución.

Si encuentra un error como este:

Msg 111, Level 15, State 1, Line 2
'CREATE VIEW' must be the first statement in a query batch.

Probablemente se deba a que está combinando la declaración con otras declaraciones en el mismo lote, lo que no está permitido en lotes.

La primera parte del mensaje de error dependerá de la declaración real que esté utilizando en su lote. En mi caso es CREATE VIEW , pero podría ser fácilmente CREATE PROCEDURE , CREATE FUNCTION , etc. si esas son las declaraciones que está utilizando.

Ejemplo

Aquí hay un ejemplo de algún código que podría causar este error:

DROP VIEW IF EXISTS vAllCustomers;

CREATE VIEW vAllCustomers AS
SELECT * FROM Customers;

Resultado:

Msg 111, Level 15, State 1, Line 3
'CREATE VIEW' must be the first statement in a query batch.

En mi caso, estoy tratando de ejecutar dos declaraciones; una DROP VIEW instrucción y CREATE VIEW declaración.

Las reglas de un lote de T-SQL establecen que CREATE VIEW declaración no se puede combinar con otras declaraciones en el mismo lote.

En otras palabras, CREATE VIEW puede ser la única declaración en su lote.

Cómo corregir el error

Podemos corregir el error anterior simplemente agregando un separador de lotes después de la primera declaración.

En SQL Server, GO palabra clave señala el final de un lote. Más específicamente, las utilidades de SQL Server interpretan GO como una señal de que deben enviar el lote actual de declaraciones T-SQL a una instancia de SQL Server.

Así que podríamos cambiar la afirmación anterior por esta:

DROP VIEW IF EXISTS vAllCustomers;
GO
CREATE VIEW vAllCustomers AS
SELECT * FROM Customers;
GO

Agregando GO soluciona el problema al separar las declaraciones en dos lotes separados.

Tenga en cuenta que GO en realidad no es parte de T-SQL. Es un comando reconocido por las utilidades de SQL Server con el fin de separar las declaraciones en lotes.

Es posible que pueda cambiar el separador de lotes, según la herramienta que utilice para conectarse a SQL Server. Por ejemplo, en SSMS, puede encontrar esta opción yendo a:Herramientas> Opciones> Ejecución de consultas> Servidor SQL y busque una opción que diga algo como "Especifique una palabra o un carácter que pueda usarse para separar lotes".