gpt4 book ai didi

sql - 如何在 SQL Server 上的触发器中编辑 INSERT 的值?

转载 作者:行者123 更新时间:2023-12-01 19:23:45 30 4
gpt4 key购买 nike

我有 table Tb

ID | Name   | Desc
-------------------------
1 | Sample | sample desc

我想在 INSERT 上创建一个触发器,它将更改插入 Desc 的值,例如:

INSERT INTO Tb(Name, Desc) VALUES ('x', 'y')

将会导致

ID | Name   | Desc
-------------------------
1 | Sample | sample desc
2 | x | Y edited

在上面的示例中,我得到了插入 Desc 的值将其更改为大写并添加 edited在最后。

这就是我所需要的,获取 Desc正在插入并修改它。

我怎样才能做到这一点?

插入后更新处理是否更好?或者用 INSTEAD OF INSERT 制作一个触发器并在每次表结构发生变化时修改它?

最佳答案

使用插入后触发器。从 inserted 伪表连接到主键上的 Tb。然后更新 desc 的值。类似于:(但可能无法编译)

CREATE TRIGGER TbFixTb_Trg 
ON Tb
AFTER INSERT
AS
BEGIN
UPDATE Tb
SET DESC = SomeTransformationOf(i.DESC)
FROM Tb
INNER JOIN inserted i on i.Id = Tb.Id
END
GO

此触发器在插入发生之后、insert 语句完成之前发生。因此,新的、不正确的值已放置在目标表中。此触发器不需要随着列的添加、删除等而更改。

警告完整性约束在 after 触发器触发之前强制执行。因此,您无法施加检查约束来强制执行 DESC 的正确形式。因为这会导致语句在触发器有机会修复任何内容之前失败。 (在依赖此段落之前,请仔细检查该段落。我已经有一段时间没有编写触发器了。)

关于sql - 如何在 SQL Server 上的触发器中编辑 INSERT 的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3580123/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com