SQl Management Studio - 在运行Update Statement之前查找“受影响的行”

时间:2009-12-10 15:24:58

标签: sql sql-server

在SQL Server Management Studio中运行Update语句之前,我想看看它会影响多少行,所以我知道我的逻辑是合理的。有什么办法吗?

我尝试过几次运行执行计划,运行后当我将鼠标悬停在绿色更新图标上时会显示受影响的行,但有时会显示该行数据的20.5行,这没有任何意义。

有什么想法吗?

4 个答案:

答案 0 :(得分:4)

估计的执行计划将根据统计信息为您提供受影响的行,因此在这种情况下它不会真正帮助您。

我建议复制UPDATE语句并将其转换为SELECT。运行它以查看返回的行数,并获得已更新的行数的答案。你可以发布SQL吗?

答案 1 :(得分:4)

几种方式:

1)将UPDATE调整为SELECT COUNT(*): e.g。

UPDATE t
SET t.Value = 'Something'
FROM MyTable t
WHERE t.OtherValue = 'Something Else'

变为:

SELECT COUNT(*)
FROM MyTable t
WHERE t.OtherValue = 'Something Else'

快速调整注释UPDATE ... SET ...部分为SELECT COUNT(*)

...或

2)在BEGIN TRANSACTION .... ROLLBACK TRANSACTION块中运行UPDATE

答案 2 :(得分:2)

如果我有如下声明:

UPDATE
     MT
FROM
     My_Table MT
INNER JOIN Some_Other_Table SOT ON
     ....
WHERE
     ....

然后得到计数我将用以下内容替换开头:

SELECT
     COUNT(DISTINCT MT.<primary key column>)
FROM
     My_Table MT
INNER JOIN Some_Other_Table SOT ON
     ....
WHERE
     ....

另一种选择是简单地将其包装在事务中并立即发出ROLLBACK。它可能需要更长的时间,你最终会锁定表,但你不会冒UPDATE和SELECT之间的拼写错误的风险。

答案 3 :(得分:1)

不是真的,除了使用与更新语句相同的条件进行选择计数(*)。