在 T-SQL 存储过程中使用 THROW
语句时,我遇到了著名的“语法错误”。我用 Google 搜索了它并检查了 StackOverflow 上的问题,但提出的解决方案(奇怪的是,被接受)对我不起作用。
我正在修改存储过程,如下所示:
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
当我编写这个 T-SQL 代码时,我收到一条错误消息
Incorrect statement near 'THROW'. Expecting CONVERSATION, DIALOG, DISTRIBUTED, or TRANSACTION
所有解决方案都建议在“THROW”之前或“ELSE BEGIN”语句之后放置分号。当我修改 T-SQL 时,我只是收到“'THROW'附近的错误语句”错误,并且似乎找不到解决方案。
有什么建议吗?
最佳答案
这种情况在 SQL Server 2014 中继续发生。
我发现将分号放在 BEGIN 末尾会有所帮助。
这种方法有错误
IF 'A'='A'
BEGIN
THROW 51000, 'ERROR', 1;
END;
而且这种方法没有错误
IF 'A'='A'
BEGIN;
THROW 51000, 'ERROR', 1;
END;
关于sql-server - T-SQL 抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26377065/