Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 正在获取事务中插入的记录数_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

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的语句。