我已经阅读了一些关于 ROWCOUNT 的内容,但它并不完全是我想要的。据我了解,rowcount 表示运行查询后受影响的行数。我要寻找的是在您运行查询之前知道。这可能吗?
问问题
10624 次
5 回答
14
您也可以BEGIN TRANSACTION
在操作执行之前使用。您可以看到受影响的行数。从那里,无论COMMIT
是结果还是使用ROLLBACK
都将数据恢复到原始状态。
BEGIN TRANSACTION;
UPDATE table
SET col = 'something'
WHERE col2 = 'something else';
查看更改的数据,然后:
COMMIT;
或者
ROLLBACK;
于 2012-09-15T23:07:51.867 回答
12
简短的回答是否定的。。
在执行查询之前,您无法获取行数。至少在 SQL 服务器中。
最好的方法是使用
Select count(*) from <table> where <condtion>
然后执行您的实际查询
[delete]or [update] [set col='val']
from <table> where <condtion>
于 2012-09-15T12:11:03.410 回答
3
估计的执行计划将根据统计数据为您提供受影响的行,因此在这种情况下它不会真正帮助您。
我建议的是复制您的UPDATE statement
orDELETE 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'
于 2012-09-15T12:11:05.127 回答
1
SELECT * FROM...
最简单的解决方案是在运行之前替换with中的列SELECT Count(*) FROM ...
和查询的其余部分(WHERE
子句需要相同)。这会告诉你有多少行会受到影响
于 2012-09-15T12:10:52.630 回答
0
在有子查询的情况下,最简单的解决方案似乎不起作用。您将如何选择此更新的计数(*):
BEGIN TRANSACTION;
update Table1 t1 set t1.column = t2.column
from (
SELECT column from Table2 t2
) AA
where t1.[Identity] = t2.[Identity]
COMMIT;
在这里,我认为您需要 BEGIN TRANSACTION
于 2019-08-25T13:06:03.530 回答