在microsoft sql server 2008中运行查询之前如何知道将影响多少行

时间:2012-09-15 12:07:07

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

我已经阅读了一些关于ROWCOUNT的信息,但它并不是我想要的。从我的理解rowcount说明运行查询后受影响的行数。我正在寻找的是在运行查询之前知道。这有可能吗?

5 个答案:

答案 0 :(得分:11)

简短的回答是否定的..

在SQL server中执行query..atleast之前,无法获取行数。

最好的方法是使用

Select count(*) from <table> where <condtion>

然后执行您的实际查询

 [delete]or [update] [set col='val']
 from <table> where <condtion>

答案 1 :(得分:6)

您也可以在执行操作之前使用BEGIN TRANSACTION。您可以看到受影响的行数。从那里,COMMIT结果或使用ROLLBACK将数据恢复到原始状态。

BEGIN TRANSACTION;

UPDATE table
SET col = 'something'
WHERE col2 = 'something else';

查看已更改的数据,然后:

COMMIT;

ROLLBACK;

答案 2 :(得分:3)

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

我建议您复制UPDATE statementDELETE statement并将其转换为SELECT。运行它以查看有多少行返回,您可以获得已更新或删除的行数的答案。

例如:

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

变为:

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

答案 3 :(得分:1)

最简单的解决方案是在运行之前将SELECT * FROM...中的列替换为SELECT Count(*) FROM ...,并将其余查询(WHERE子句必须相同)替换。这将告诉您将受影响的行数

答案 4 :(得分:0)

在存在子查询的情况下,最简单的解决方案似乎不起作用。您如何选择此更新的计数(*):

BEGIN TRANSACTION;
update Table1 t1 set t1.column = t2.column
from (
  SELECT column from Table2 t2
) AA
where t1.[Identity] = t2.[Identity]
COMMIT;

在这里,我认为您需要开始交易