Триггер обновления SQL Server (не уникальная проблема вставки) - PullRequest
9 голосов
/ 13 февраля 2011

У меня есть супер простая таблица, которая выглядит примерно так:

CREATE TABLE [dbo].[TestTable](
[SomeColumn] [int] NOT NULL )

У меня также есть супер простой триггер на другую таблицу, которая выглядит примерно так:

ALTER TRIGGER [dbo].[trg_Audit_TableXYZ] ON [dbo].[TableXYZ] AFTER UPDATE

AS

INSERT INTO [dbo].[TestTable] Values (123)

Myпроблема в том, что при запуске триггера я получаю следующую ошибку:

Обновленные или удаленные значения строк либо не делают строку уникальной, либо изменяют несколько строк (2 строки).

Я не понимаю, с чего бы мне эта ошибка?

Спасибо.

Ответы [ 2 ]

19 голосов
/ 13 февраля 2011

Добавьте SET NOCOUNT ON в начало определения триггера.Это подавит сообщение о воздействии дополнительных строк, которое исходит от триггера и сбивает SSMS.

т.е.

ALTER TRIGGER [dbo].[trg_Audit_TableXYZ] 
ON [dbo].[TableXYZ] 
AFTER UPDATE
AS
SET NOCOUNT ON
--Rest of trigger definition follows
INSERT INTO [dbo].[TestTable] Values (123)
0 голосов
/ 13 февраля 2011

Я не могу воссоздать.Может быть, это противоречит какому-то другому триггеру, ограничению или чему-то еще?Я не знаю.

Обновление:

Как сказал Микаэль, добавление первичного ключа в TableXYZ обойдет эту проблему.Это происходит только при изменении таблицы с помощью SSMS.Спасибо, Микаэль.Это работает:

create database testdb
go
use testdb

CREATE TABLE [dbo].[TestTable](
[SomeColumn] [int] NOT NULL)

CREATE TABLE [dbo].[TableXYZ](
[ID] [int] identity(1,1) primary key,
[SomeColumn] [int] NOT NULL )
go

create TRIGGER [dbo].[trg_Audit_TableXYZ] ON [dbo].[TableXYZ] AFTER UPDATE
AS
INSERT INTO [dbo].[TestTable] Values (123)
go

INSERT INTO [dbo].[Tablexyz] Values (4)
INSERT INTO [dbo].[Tablexyz] Values (5)
INSERT INTO [dbo].[Tablexyz] Values (6)

update tablexyz set somecolumn = 789
update tablexyz set somecolumn = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...