【问题标题】:TSQL: UPDATE Get num rows updatedTSQL:更新获取更新的行数
【发布时间】:2018-05-09 18:07:40
【问题描述】:

我有这样的更新声明:

UPDATE TABLE1
SET TABLE1.COL = TABLE2.COL
FROM TABLE1
INNER JOIN TABLE2 ON TABLE1.TAB2ID = TABLE2.ID
WHERE TABLE1.COL1 = '123'`

是否有办法知道实际更新了多少记录。

MERGEOUTPUT $ACTION命令。

【问题讨论】:

  • “实际更新”是指查询触及的行还是值更改为不同值的行?根据where 子句,查询可以触及666 行,但只有42 行的值可能更改为123 以外的值。 @@RowCount 返回第一个值。触发器可以使用inserteddeleted 表来确定第二个值。

标签: sql-server tsql sql-server-2008 sql-update


【解决方案1】:

要确定受操作影响的行数,您需要查找 @@ROWCOUNT

【讨论】:

    【解决方案2】:

    您需要根据需要收集统计数据,但 @@ROWCOUNT 会返回此:

    declare @ABC table (
    ColName varchar(32)
    )
    
    insert into @ABC values ('A')
    insert into @ABC values ('B')
    insert into @ABC values ('C')
    update @Fish set ColName= 'D' where ColName= 'C'
    select @@ROWCOUNT  --Count 1
    
    update @ABC set ColName= 'X'
    select @@ROWCOUNT -- Count 3
    

    这里官方来源

    https://technet.microsoft.com/en-us/library/ms187316(v=sql.110).aspx

    https://docs.microsoft.com/en-us/sql/t-sql/functions/rowcount-transact-sql

    【讨论】:

      【解决方案3】:

      您可以为此使用@@ROWCOUNT。

      如果UPDATE是用户定义函数的一部分,你可以RETURN它,像这样...

      UPDATE
        TABLE1
      SET
        TABLE1.COL = TABLE2.COL
      FROM
        TABLE1
      INNER JOIN
        TABLE2
      ON
        TABLE1.TAB2ID = TABLE2.ID
      WHERE
        TABLE1.COL1 = '123'
      ;
      
      RETURN @@ROWCOUNT
      ;
      

      如果只是标准的UPDATE 查询,您可以在更新后立即使用SELECT @@ROWCOUNT 来查看有多少行受到影响。

      【讨论】:

        猜你喜欢
        • 2020-03-17
        • 2023-03-09
        • 2021-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-15
        • 1970-01-01
        相关资源
        最近更新 更多