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