【发布时间】:2011-08-22 13:41:33
【问题描述】:
我们有一个运输表,其中包含一个 orderID (oid) 和一个发票号 (ino) 以及一个序列号列。我正在尝试编写一个触发器,将序列号设置为零或如果存在唯一的 oid、ino、seq 集则将其递增。我不知道如何引用插入记录的 OID 和 INO 列?
这是我目前得到的:
CREATE TRIGGER SHPVIAb_insert ON [acsdcs2].[dbo].[SHPVIAb]
FOR INSERT
AS
DECLARE @newseq tinyint;
SET @newseq = 0;
IF EXISTS (SELECT *
FROM [acsdcs2].[dbo].[SHPVIAb] s
WHERE s.SHVOID_AN = inserted.SHVOID_AN
AND s.SHVINO_AN = inserted.SHVINO_AN
)
BEGIN
SET @newseq = (SELECT MAX(SHVSEQ_US)
FROM [acsdcs2].[dbo].[SHPVIAb] s
WHERE s.SHVOID_AN = inserted.SHVOID_AN
AND s.SHVINO_AN = inserted.SHVINO_AN)
SET @newseq = @newseq + 1
END
update [acsdcs2].[dbo].[SHPVIAb]
set SHVSEQ_US=@newseq;
【问题讨论】:
-
什么数据库后端?触发器代码是非常特定于数据库的
-
我可以告诉你,如果这是用于 SQl 服务器(我怀疑来自插入的伪表引用),你的触发器写得不好,因为它假设插入的表中永远不会有超过一条记录。这是一个在编写触发器时非常糟糕的假设,它们只为一批中的所有记录触发一个。
标签: sql-server triggers insert