如何从 table1 上的触发器将值插入 table2

liz*_*y81 1 sql-server-2008 sql-server

我有 2 个带有列名的表WHO,我正在使用这 2 个表创建一个视图,其中FSwho.who = FStasks.who.

如果我在FStaskswhere 中输入一条新记录FStasks.who = LIZ,但我的FSwho.who表上没有记录,那么触发器应该插入LIZ到我的表中。

使用下面的代码,我得到的错误是

无法绑定多部分标识符“fs_tasks.WHO”。(我也试过inserted.who

我搜索了互联网,我遇到的大多数解决方案都是关于更改同一张桌子上的值。如何将值插入到完全不同的表中?

ALTER TRIGGER [dbo].[FS_TASKS_TRIG]
   ON  [dbo].[FS_TASKS]
   AFTER INSERT,UPDATE
AS 
BEGIN
    SET NOCOUNT ON;

DECLARE @Action as char(1);
    SET @Action = (CASE 
        WHEN EXISTS(SELECT * FROM INSERTED) AND EXISTS(SELECT * FROM DELETED) THEN 'U'  -- Set Action to Updated.
        WHEN EXISTS(SELECT * FROM INSERTED) THEN 'I'  -- Set Action to Insert.
        WHEN EXISTS(SELECT * FROM DELETED) THEN 'D'  -- Set Action to Deleted.
        ELSE NULL -- Skip. It may have been a "failed delete".   
    END) 

    if @Action in ('I','U') 
    begin


        IF NOT EXISTS(SELECT * FROM fs_who where who = WHO) BEGIN
            INSERT INTO FS_WHO (WHO)
            VALUES (fs_tasks.WHO)
        END

    end 

END
Run Code Online (Sandbox Code Playgroud)

Rob*_*ley 5

inserted是一张桌子。所以尝试:

INSERT INTO FS_WHO (WHO)
SELECT DISTINCT i.WHO
FROM inserted AS i
WHERE NOT EXISTS (SELECT *
    FROM FS_WHO f
    WHERE f.WHO = i.WHO);
Run Code Online (Sandbox Code Playgroud)

而且您不需要为此考虑@Action...