transact length len for sql-server tsql throw

sql server - length - Excepción de lanzamiento de T-SQL



return sql transact (7)

Como se señaló a través de muchas respuestas, la sentencia THROW se introdujo en SQL Server 2012. Por lo tanto, si está utilizando esta versión de SQL Server o posterior, se recomienda usar THROW, de lo contrario, utilice RAISERROR.

Además, la instrucción antes de la instrucción THROW debe ir seguida del terminador de la coma (;). Es por eso que debes incluir un punto y coma antes del lanzamiento.

Mire este artículo acerca de las diferencias entre RAISERROR y THROW en el servidor Sql

También me gustaría animarle a que lea la documentación de MSDN THROW (Transact-SQL) que explica estos asuntos en la sección Comentarios.

Me enfrento a la famosa ''Sintaxis incorrecta'' mientras uso una sentencia THROW en un procedimiento almacenado de T-SQL. Lo he buscado en Google y he comprobado las preguntas en StackOverflow pero las soluciones propuestas (y, de forma extraña, aceptadas) no funcionan para mí.

Estoy modificando un procedimiento almacenado de la siguiente manera:

ALTER PROCEDURE [dbo].[CONVERT_Q_TO_O] @Q_ID int = NULL, @IDENTITY INT = NULL OUTPUT AS BEGIN SET NOCOUNT ON; DECLARE @EXISTING_RECORD_COUNT [int]; SELECT @EXISTING_RECORD_COUNT = COUNT (*) FROM [dbo].[O] WHERE [Q_ID] = @Q_ID IF @EXISTING_RECORD_COUNT = 0 BEGIN -- DO SOME STUFF HERE -- RETURN NEW ID SELECT @IDENTITY = SCOPE_IDENTITY() END ELSE BEGIN THROW 99001, ''O associated with the given Q Id already exists'', 1; END END GO

Cuando codifico este T-SQL me sale un error que dice

Declaración incorrecta cerca de ''THROW''. Esperando CONVERSACIÓN, DIÁLOGO, DISTRIBUIDO o TRANSACCIÓN

Todas las soluciones sugieren colocar un punto y coma antes de las declaraciones de ''THROW'' o después de ''ELSE BEGIN''. Cuando modifico el T-SQL, simplemente obtengo el error " Declaración incorrecta cerca de ''TIRAR'' " y parece que no puedo encontrar una solución.

¿Alguna sugerencia?


Este error también puede ocurrir si usted codifica incorrectamente esto:

RAISEERROR(''your message here'',16,1)

Me quedé mirando eso durante cuatro horas, colocando puntos y coma por todas partes, antes de darme cuenta de que había escrito mal "RAISERROR".


Esto sigue ocurriendo en SQL Server 2014.

He encontrado que poner el punto y coma al final de BEGIN ayuda.

Este enfoque tiene el error.

IF ''A''=''A'' BEGIN THROW 51000, ''ERROR'', 1; END;

Y este enfoque no tiene el error.

IF ''A''=''A'' BEGIN; THROW 51000, ''ERROR'', 1; END;


Para resolver tu problema,

Declaración incorrecta cerca de ''THROW''. Esperando CONVERSACIÓN, DIÁLOGO, DISTRIBUIDO o TRANSACCIÓN

ponga el punto y coma antes de su declaración de lanzamiento:

BEGIN ;THROW 99001, ''O associated with the given Q Id already exists'', 1; END

Y sobre el

Msgstr "Declaración incorrecta cerca de ''THROW''".

Intente usar esto en caso de que esté usando una versión anterior a SQL 2012:

RAISERROR(''O associated with the given Q Id already exists'',16,1);

Porque THROW es una nueva característica de SQL 2012.


Prueba con esto:

RAISERROR(''your message here'',16,1)


Yo suelo:

CREATE PROCEDURE dbo.THROW_EXCEPTION @Message VARCHAR(MAX), @Code VARCHAR(MAX) = -1 AS BEGIN DECLARE @BR VARCHAR(MAX) = CHAR(13) + CHAR(10) DECLARE @TAB VARCHAR(MAX) = '' '' DECLARE @T TABLE (X BIT) INSERT INTO @T (X) VALUES ( @BR + @TAB + ''Error! '' + ISNULL(@Message, ''{NULL}'') + @BR + @TAB + ''Code: '' + ISNULL(@Code, ''{NULL}'') + @BR) END

Siguiente:

EXEC THROW_EXCEPTION ''Your Message'' -- OR EXEC THROW_EXCEPTION ''Your Message'', ''Error Code'' -- OR EXEC THROW_EXCEPTION ''Your Message'', 123456


poner Antes de THROW palabra clave y funcionará.