我们有一个发货表,它有一个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;
发布于 2011-08-23 22:40:21
我认为像这样的东西更接近你想要的。您希望联接到插入的表,并处理一次插入多条记录的情况。
CREATE TRIGGER SHPVIAb_insert ON [acsdcs2].[dbo].[SHPVIAb]
FOR INSERT
AS
BEGIN
IF EXISTS ( SELECT 1
FROM [acsdcs2].[dbo].[SHPVIAb] s
INNER JOIN INSERTED i ON s.SHVOID_AN = i.SHVOID_AN
AND s.SHVINO_AN = i.SHVINO_AN )
BEGIN
UPDATE s
SET SHVSEQ_US = ( SELECT MAX(SHVSEQ_US)
FROM [acsdcs2].[dbo].[SHPVIAb] ss
WHERE ss.SHVOID_AN = s.SHVOID_AN
AND ss.SHVINO_AN = s.SHVINO_AN
) + 1
FROM [acsdcs2].[dbo].[SHPVIAb] s
INNER JOIN INSERTED i ON s.SHVOID_AN = i.SHVOID_AN
AND s.SHVINO_AN = i.SHVINO_AN
END
END
https://stackoverflow.com/questions/7148377
复制相似问题