首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Sql Server触发器

Sql Server触发器
EN

Stack Overflow用户
提问于 2010-10-27 22:49:41
回答 3查看 262关注 0票数 2

我有一个表,其中有4个字段。

代码语言:javascript
运行
复制
Col1 Guid Primary-Key (FK to another table)
Col2 Guid Primary-Key (FK to another table)
Col3 Int Primary-Key
Col4 Int

现在我想这样做:当用户插入的新记录与一条记录具有相同的值之前在表中存在时,如下所示:

有这样的记录:

代码语言:javascript
运行
复制
X Y Z 2

新记录

代码语言:javascript
运行
复制
X Y Z 3

将现有记录更新为以下内容:

代码语言:javascript
运行
复制
X Y Z 5

并且还防止插入重复记录。我写了非常基本的触发器。现在帮我完成这个。提前谢谢。;)

代码语言:javascript
运行
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-27 23:48:32

我将把我的评论合并成一个答案。

在这种情况下,我会避免使用触发器。我认为最好的方法是编写一个可以从代码中调用的存储过程。该存储过程将执行if exists... update... else insert...逻辑。

票数 1
EN

Stack Overflow用户

发布于 2010-10-27 23:41:03

如果您使用的是SQL Server2008,则可以使用MERGE

票数 1
EN

Stack Overflow用户

发布于 2010-10-27 23:44:23

正如Joe Stefanelli所说,最好的方法是通过使用insert-or-update存储过程并撤销表上的INSERT perm来替换直接插入到表中。

但是,如果触发器上没有设置,请尝试将以下内容添加到触发器

代码语言:javascript
运行
复制
DELETE [dbo].[Tbl]
From [dbo].[Tbl] INNER JOIN [Inserted] ON [dbo].[Tbl].[Col1] = [Inserted].[Col1] AND
                                          [dbo].[Tbl].[Col2] = [Inserted].[Col2]
WHERE [dbo].[Tbl].[Col3] = [Inserted].[Col3] AND [dbo].[Tbl].[Col4] = [Inserted].[Col4];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4034538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档