none
怎样取得这里面的@@rowcount。 RRS feed

  • 问题

  • 我有一个存储过程中大概包含几段代码:

       select @_identityinserton=N'IF EXISTS(
                SELECT 1
                FROM @ArcPrefix@.sys.syscolumns
                WHERE id = OBJECT_ID(''@ArcPrefix@.dbo.@TabName@'') AND status = 0x80)
                BEGIN
                SET IDENTITY_INSERT @ArcPrefix@.dbo.@TabName@ ON
                END
    '

    select @_identityinsertoff=N'IF EXISTS(
                SELECT 1
                FROM @ArcPrefix@.sys.syscolumns
                WHERE id = OBJECT_ID(''@ArcPrefix@.dbo.@TabName@'') AND status = 0x80)
                BEGIN
                SET IDENTITY_INSERT @ArcPrefix@.dbo.@TabName@ OFF
                END
    '

    SET @_Sql =
       N' 
       
       INSERT @ArcPrefix@.dbo.@TabName@ WITH (ROWLOCK) @ColListA@
       SELECT @ColListB@
       FROM @ProdPrefix@.dbo.@TabName@ AS P WITH (NOLOCK)
         INNER JOIN #ARC_CHIP AS T
          ON P.Lotid = T.Lotid
          AND P.Waferid = T.Waferid
          AND P.Chipid = T.Chipid
         
          
       '

    因为需要插入的这些表都包含identity列,所以我后面有写

    SET @_Sql = REPLACE(@_Sql, '@ProdPrefix@', @_ProdPrefix)
      SET @_Sql = REPLACE(@_Sql, '@ArcPrefix@', @_ArcPrefix)
      SET @_Sql = REPLACE(@_Sql, '@TabName@', @_TabName)
      SET @_Sql = REPLACE(@_Sql, '@ColListA@', @_ColListA)
      SET @_Sql = REPLACE(@_Sql, '@ColListB@', @_ColListB)
      SET @_identityinserton = REPLACE(@_identityinserton, '@ArcPrefix@', @_ArcPrefix)
      SET @_identityinsertoff = REPLACE(@_identityinsertoff, '@ArcPrefix@', @_ArcPrefix)
      SET @_identityinserton = REPLACE(@_identityinserton, '@TabName@', @_TabName)
      SET @_identityinsertoff = REPLACE(@_identityinsertoff, '@TabName@', @_TabName)
      if @_condition='TO_PROD_DB'
      set @_sql=@_identityinserton +@_sql+@_identityinsertoff

    但是我想抓取到这个sql中受影响的行数,如果在这个sql执行之后再抓取的话,根本就不是我想要的。

    那我要怎么才能抓取到我要的@@rowcount呢?


    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.
    2011年7月20日 5:21

答案

  • 可以使用sp_executesql搭配輸出參數,以下為簡單的測試語法:

    declare @sql nvarchar(512)
    declare @params nvarchar(512)
    declare @count int
    set @sql = N'select * from sys.objects;
    					set @countOut = @@ROWCOUNT 
    					'
    set @params = N'@countOut int output'
    
    exec sp_executesql @sql,@params,@countOut = @count output
    
    select @count 
    


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    • 已标记为答案 Wison-Ho 2011年7月20日 7:23
    2011年7月20日 5:39