【发布时间】:2010-02-08 22:37:11
【问题描述】:
我正在开发一个触发器,它需要在另一个表中重新插入其数据。
目标表有一个主键 INT NOT NULL WITHOUT Identity,所以我有 2 个选择:
- 计算最大值并从此处插入。
- 从序列表中获取最大值。
我过去总是创建一个具有标识的表变量,并从之前计算的值插入移位。
CREATE TRIGGER trg
ON [dbo].[table]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @t TABLE (sec INT IDENTITY(1, 1), id INT)
DECLARE @ini INT
SELECT @ini = ISNULL(MAX(id), 0) FROM tableDest
-- SELECT @ini = value FROM sequencesTable WHERE seqId = 987
INSERT INTO @t (id) SELECT id FROM inserted
INSERT INTO tableDest
(id, field1, field2)
SELECT @ini + t.sec, field1, field2
FROM @t t
JOIN inserted ON t.id = inserted.id
-- SELECT @ini = @ini + MAX(t.sec) FROM @t
-- UPDATE sequencesTable SET value = @ini WHERE seqId = 987
END
有没有更好的方法来做到这一点?
提前致谢。
【问题讨论】:
-
你需要确定另一个表中那个int PK的意图和意义是什么。这是您可以确保为其提供正确键值的唯一方法。
标签: sql-server tsql