Как узнать, сколько строк будет затронуто перед запуском запроса в Microsoft SQL Server 2008

Я немного читал о ROWCOUNT, но не совсем то, что искал. из моего понимания rowcount указывает количество затронутых строк ПОСЛЕ того, как вы запускаете запрос. что им нужно знать, прежде чем запускать запрос. возможно ли это?

Ответ 1

Короткий ответ - нет.

Вы не можете получить количество строк перед выполнением запроса.. на сервере SQL.

Лучший способ сделать это - использовать

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

затем выполните ваш фактический запрос

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

Ответ 2

Вы также можете использовать BEGIN TRANSACTION перед выполнением операции. Вы можете увидеть количество затронутых строк. Оттуда либо COMMIT результаты, либо используйте ROLLBACK, чтобы вернуть данные в исходное состояние.

BEGIN TRANSACTION;

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

Просмотрите измененные данные, а затем:

COMMIT;

или

ROLLBACK;

Ответ 3

Оцененный план выполнения позволит вам затронуть строки, основанные на статистике, поэтому в этом случае вам это действительно не поможет.

Я бы порекомендовал копировать ваши 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'

Ответ 4

Самое простое решение - заменить столбцы в SELECT * FROM... на SELECT Count(*) FROM ..., а остальная часть вашего запроса (предложение WHERE должно быть одинаковым), прежде чем запускать его. Это скажет вам, сколько строк будет затронуто

Ответ 5

Самое простое решение, похоже, не работает в случае, когда есть подзапрос. Как бы вы выбрали количество (*) этого обновления:

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

Здесь я думаю, что вам нужно НАЧАТЬ СДЕЛКУ