Sql 正在获取事务中插入的记录数
我需要获取受存储过程影响的记录数。基于此值,我想更新用户是否完成了操作 但是我的输出Sql 正在获取事务中插入的记录数,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我需要获取受存储过程影响的记录数。基于此值,我想更新用户是否完成了操作 但是我的输出@RecordsAffected参数始终为0 如何获取事务中插入的记录数? 跟踪和 这是我的程序 ALTER PROCEDURE [dbo].[SaveRoleFeatures] ( @RoleId INT, @SelectedFeatures AS IdInt READONLY, @RecordsAffected INT OUTPUT )
@RecordsAffected
参数始终为0
如何获取事务中插入的记录数?
跟踪和
这是我的程序
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
这是因为@rowcount应该返回受上一条语句影响的行数,而commit是一条将@rowcount设置为0的语句。请尝试在commit@Blorgbeard是的,它正在工作。谢谢但是为什么它在提交后不起作用呢?有什么想法吗?@Billa显然是因为
@@rowcount
应该返回受上一条语句影响的行数,commit
是一条将@@rowcount
设置为0的语句。