gpt4 book ai didi

sql - T-SQL : How to return 0 rows in from stored procedure, 以及如何使用 XACT_ABORT 和 TRY/CATCH

转载 作者:行者123 更新时间:2023-12-02 15:14:55 24 4
gpt4 key购买 nike

我正在编写一个存储过程,当出现问题时我想返回 0 条记录。我似乎不知道如何只返回 0 行?我使用过 SELECT NULL 但这会返回 1 行,第 1 行第 1 列中有一个 NULL。我也尝试过不指定任何 SELECT 语句在我的错误代码路径中,但是在调用 SP 后测试 @@ROWCOUNT 的值时,它返回 1。我认为这可能是因为 @@ROWCOUNT 是切勿从 SP 中较早的 SELECT 语句(在 EXISTS() 中)重置。任何建议将不胜感激。

此外,我已将 XACT_ABORT 设置为 ON,但我还使用了 TRY/CATCH block 来确保我返回正确的错误“返回值”存储过程。这个可以吗?如果出现错误,XACT_ABORT 是否会覆盖 TRY/CATCH 还是我的错误代码路径仍会导致返回正确的返回值?

-- Setup
SET NOCOUNT ON; -- SET NOCOUNT ON added to prevent extra result sets from interfering with SELECT statements.
SET XACT_ABORT ON; -- SET XACT_ABORT ON rollback transactions on errors
DECLARE @return int; SET @return = 1; -- Default to general error

-- Start transaction
BEGIN TRANSACTION
BEGIN TRY

IF NOT EXISTS(SELECT NULL FROM [MyTable] WHERE [Check] = 1)
BEGIN

-- Insert new record
INSERT INTO [MyTable] (Check, Date) VALUES (1, GETDATE());
SELECT SCOPE_IDENTITY() AS [MyValue]; -- Return 1 row
SET @return = 0; -- Success

END
ELSE
BEGIN

-- Fail
SELECT NULL AS [MyValue]; -- Want to return 0 rows not 1 row with NULL
SET @return = 2; -- Fail error

END

END TRY
BEGIN CATCH

-- Error
ROLLBACK TRANSACTION;
SELECT NULL AS [MyValue]; -- Want to return 0 rows not 1 row with NULL
SET @return = 1; -- General error

END CATCH

-- End transaction and return
COMMIT TRANSACTION
RETURN @return;

最佳答案

要返回 0 行,您可以执行以下操作:

SELECT TOP 0 NULL AS MyValue

就个人而言,我会使用此存储过程的 OUTPUT 参数来返回 ID,而不是返回结果集 - 但这只是我的偏好。然后只需将该输出参数设置为例如-1 默认表示未执行任何操作。

关于sql - T-SQL : How to return 0 rows in from stored procedure, 以及如何使用 XACT_ABORT 和 TRY/CATCH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3510982/

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