我有一个超级简单的表,看起来像这样:
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行)。
我不明白,为什么我会收到这个错误?
谢谢。
答案 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