Этот вопрос обычно заставляет меня думать, что "триггеры".
Я только что создал точную копию вашего сценария (спасибо за подробные инструкции), и я вроде как вижу похожие результаты.
В смысле я имел в виду, что при выполнении вставки SSMS выводит
(затронут 1 ряд)
(затронут 1 ряд)
но когда я проверял исходную базу данных, была добавлена только одна строка.
Чтобы решить вашу проблему, сделайте следующее:
ALTER TRIGGER [dbo].[InsteadTriggerSG] on [dbo].[SG]
INSTEAD OF INSERT AS BEGIN
SET NOCOUNT ON -- adding this in stops it from reporting from in here
INSERT INTO [TEST].dbo.SG(sgName,active,hiddenf)
SELECT sgName,COALESCE (active,0), 1 FROM inserted
END
Проблема в том, что и триггер, и фактическая таблица в исходной базе данных сообщают, что они обновили строку. Если вы удалите эту отчетность из триггера, но оставите ее в исходной базе данных, вы всегда получите верный ответ, будь то обновление через представление или непосредственно в исходную таблицу.