SQL Server更新触发器(非唯一插入问题)

时间:2011-02-13 04:16:46

标签: sql-server triggers

我有一个超级简单的表,看起来像这样:

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)

我的问题是,当触发器运行时,我收到以下错误:

更新或删除的行值不会使行唯一,也不会更改多行(2行)。

我不明白,为什么我会收到这个错误?

谢谢。

2 个答案:

答案 0 :(得分:19)

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)

答案 1 :(得分:0)

我无法再创造。这可能与其他触发器或约束或其他东西相冲突吗?我不知道。

<强>更新

正如Mikael所说,在TableXYZ中添加主键可以解决这个问题。仅在使用SSMS修改表时才会发生。谢谢Mikael。这有效:

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