gpt4 book ai didi

sql - 获取事务中插入的记录数

转载 作者:行者123 更新时间:2023-12-04 02:49:31 25 4
gpt4 key购买 nike

我需要获取受存储过程影响的记录数。基于此值,我想向用户更新操作是否已完成。

但我的 OUTPUT @RecordsAffected 参数始终为 0

如何获取交易中插入的记录数?

已关注 How can I get the number of records affected by a stored procedure?http://rusanu.com/2009/06/11/exception-handling-and-nested-transactions/

这是我的程序

ALTER PROCEDURE [dbo].[SaveRoleFeatures]          
(
@RoleId INT,
@SelectedFeatures AS IdInt READONLY,
@RecordsAffected INT OUTPUT
)
AS

BEGIN

set nocount on;

DECLARE @ErrorCode int
SELECT @ErrorCode = @@ERROR
declare @trancount int;
set @trancount = @@trancount;

BEGIN TRY

BEGIN TRAN

DELETE FROM RoleXFeature WHERE RoleIid= @RoleId

INSERT RoleXFeature
(
RoleIid,
FeatureId,
IsDeleted
)
SELECT

@RoleId,
Id,
0

FROM @SelectedFeatures

COMMIT TRAN

SET @RecordsAffected = @@ROWCOUNT

END TRY

BEGIN CATCH

declare @error int, @message varchar(4000), @xstate int;
select @error = ERROR_NUMBER(),
@message = ERROR_MESSAGE(), @xstate = XACT_STATE();
if @xstate = -1
rollback;
if @xstate = 1 and @trancount = 0
rollback
if @xstate = 1 and @trancount > 0
rollback transaction SaveRoleFeatures;

raiserror ('usp_my_procedure_name: %d: %s', 16, 1, @error, @message) ;
return;

END CATCH


END

最佳答案

提交前需要检查@@ROWCOUNT

作为@GSerg noted ,这是因为@@rowcount 应该返回受最后一条语句影响的行数,而 commit 是一条 documented 的语句。将@@rowcount 设置为 0。

关于sql - 获取事务中插入的记录数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18042007/

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