我读过一些关于ROWCOUNT的文章,但这并不是我想要的。根据我的理解,rowcount表示运行查询后受影响的行数。我想要的是在你运行查询之前知道。这可能吗?
您也可以在执行操作之前使用BEGIN TRANSACTION
。您可以看到受影响的行数。从那里,要么COMMIT
显示结果,要么使用ROLLBACK
将数据恢复到原始状态。
BEGIN TRANSACTION;
UPDATE table
SET col = 'something'
WHERE col2 = 'something else';
审查更改的数据,然后:
COMMIT;
或
ROLLBACK;
简短的回答是否定的。
在执行查询之前,无法获取行数。。至少在SQL server中。
最好的方法是使用
Select count(*) from <table> where <condtion>
然后执行您的实际查询
[delete]or [update] [set col='val']
from <table> where <condtion>
估计的执行计划将根据统计数据为您提供受影响的行,因此在这种情况下对您没有真正的帮助。
我建议您复制UPDATE statement
或DELETE 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'
最简单的解决方案是在运行查询之前将SELECT * FROM...
中的列替换为SELECT Count(*) FROM ...
和其他查询(WHERE
子句需要相同)。这将告诉您有多少行将受到的影响
在有子查询的情况下,最简单的解决方案似乎不起作用。您将如何选择此更新的计数(*):
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