在表中创建新记录时,我需要在另外两个表(b和c)中创建一个记录。诀窍是两个新记录需要具有相同的PK值,它必须是UNIQUEIDENTIFIER,因此使用NEWID()生成并且与原始记录的密钥无关。所以,我想在INSERT TRIGGER中做的事情看起来像这样:
INSERT INTO [b] ([bKey], [Foo])
OUTPUT inserted.[bKey] [cKey], i.[Bar] INTO [c]
SELECT NEWID(), i.[Foo] FROM inserted i
然而,这似乎是非法的(In an OUTPUT clause in an INSTEAD OF INSERT trigger, is it possible to reference both INSERTED tables?)。有没有办法做到这一点,除了使用CURSOR和变量作为NEWID()的结果?
答案 0 :(得分:3)
INSERT
语句的OUTPUT clause不能引用输出子句的inserted
伪表以外的任何表 - 请参阅from_table_name
上的注释:
是一个列前缀,用于指定DELETE,UPDATE或MERGE语句的FROM子句中包含的表,该语句用于指定要更新或删除的行。
答案 1 :(得分:1)
我认为您可以使用表变量/临时表来实现目标:
DECLARE @tmp TABLE (
[bKey] …,
[Foo] …,
[Bar] …
);
INSERT INTO @tmp ([bKey], [Foo], [Bar])
SELECT NEWID(), [Foo], [Bar] FROM inserted;
INSERT INTO [b] ([bKey], [Foo])
SELECT [bKey], [Foo] FROM @tmp;
INSERT INTO [c] ([cKey], [Bar])
SELECT [bKey], [Bar] FROM @tmp;