gpt4 book ai didi

sql-server - T-SQL 抛出异常

转载 作者:行者123 更新时间:2023-12-01 18:34:24 25 4
gpt4 key购买 nike

在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com