Почему существует дополнительный "(затронут 1 ряд (ы))"

SSMS показывает дополнительный (1 row(s) affected) каждый раз, когда я выполняю insert/update, Например, выполните следующий SQL

declare @a table (a int)
insert into @a values (1), (2)
update @a set a = 3 

И SSMS отобразит следующее сообщение.

(Затронуты 2 строки)

(Затронут 1 ряд)

(Затронуты 2 строки)

(Затронут 1 ряд)

Я не нашел триггера базы данных / сервера. Что может вызвать лишнее (1 row(s) affected)?

3 ответа

Решение

Это обычно означает, что у вас есть actual execution plan опция включена. План выполнения отправляется как дополнительный набор строк, что приводит к дополнительному (1 row(s) affected) сообщение.

Чтобы отключить фактический план выполнения, нажмите Ctrl+M.

Этого не должно случиться. попытаться заглянуть в actual execution planчто там происходит.

Я нашел этот пост, так как столкнулся с той же проблемой, но без включенных параметров плана выполнения или каких-либо триггеров.

У меня был очень простой фрагмент кода, который обычно не затрагивал никакие строки:

DECLARE @dbname VARCHAR(50) = 'AdventureWorks'

При тестировании некоторых других функций SQL Server с помощью Management Studio v18.10 приведенный выше код возвращал пару строк вывода, которые не ожидались.

(затронуто 0 строк)(затронуто 1 строка) Время завершения: 2022-01-07T12:04:36.6414442+00:00

В моем случае я отследил его до настроек подключения, где была отмечена / выбрана опция « Включить постоянное шифрование (шифрование столбца) ». Я тестировал Always Encrypted, который использует шифрование параметров.

Он появляется только в том случае, если переменная объявлена ​​и установлена ​​в том же операторе.

Установка для параметра « Включить постоянное шифрование» (шифрование столбца) значения «не выбрано/не проверено» исправило отчеты о затронутых строках.

Добавлено, чтобы помочь другим, кто может найти эту проблему.

Фитц

Другие вопросы по тегам