我有一个表有4个字段。Sql Server触发器
Col1 Guid Primary-Key (FK to another table)
Col2 Guid Primary-Key (FK to another table)
Col3 Int Primary-Key
Col4 Int
现在我想这样做:当用户插入一个新的记录,其具有相同的值作为记录在表之前存在类似如下:
有这样记载:
X Y Z 2
新纪录
X Y Z 3
更新现有的记录下面:
X Y Z 5
并且还防止插入重复记录。我写了非常基本的触发器。现在帮我完成这个。提前致谢。 ;)
CREATE TRIGGER [Tbl].[TriggerName]
ON [dbo].[Tbl]
AFTER INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON;
UPDATE [dbo].[Tbl]
SET [dbo].[Tbl].[Col4] += [Inserted].[Col4]
From [dbo].[Tbl] INNER JOIN [Inserted] ON [dbo].[Tbl].[Col1] = [Inserted].[Col1] AND
[dbo].[Tbl].[Col2] = [Inserted].[Col2]
WHERE [dbo].[Tbl].[Col3] = [Inserted].[Col3];
//How to prevent from inserting duplicate record?
END
如果你的主键是'(col1,col2,col3)',当'X Y Z 2'已经存在时,用户将永远不能插入'X Y Z 3'。这会违反你的主键。 – 2010-10-27 14:57:13
@Joe是的,你是对的,在做这个之前,我创建了这个主键来防止重复,但现在我想更新表中存在的记录,所以在解决这个问题之后,我要去除主键或扩展到四列;) – Sadegh 2010-10-27 15:04:59
@Sadegh:你为什么试图把它放在触发器中?为什么你不能在你的代码中测试存在,并在适当的时候更新/插入。 – 2010-10-27 15:12:26