Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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;

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