无法绑定多部分标识符“INSERTED.”

mns*_*hab 2 sql sql-server

我想写一个触发器:如果表中存在记录,则更新另一个表,如果不存在则插入到该表中,我在创建此触发器时出错:

CREATE TRIGGER TR_update_laststatus_on_membersservices ON [dbo].[activemembers] AFTER 
INSERT AS
BEGIN
IF EXISTS    
   (
   SELECT 1   
   FROM [membersservices] 
WHERE [membersservices].[mobilenumber] = INSERTED.[mobilenumber]
    AND [membersservices].[sid] = INSERTED.[sid]    
)    
BEGIN
  UPDATE membersservices  
  SET  membersservices.[last_status] = INSERTED.enable
  WHERE membersservices.mobilenumber=INSERTED.mobilenumber and membersservices.[sid]=INSERTED.[sid]
END
ELSE
    INSERT INTO membersservices VALUES ( INSERTED.[mobilenumber] ,INSERTED.[sid] ,INSERTED.[enable] , INSERTED.[dt] ); 
end
Run Code Online (Sandbox Code Playgroud)

Rem*_*anu 6

INSERTED 是一个(伪)表,因此每次使用它时它都必须出现在 FROM 子句中:

SELECT 1   
   FROM [membersservices] 
   JOIN INSERTED on ...  <--- you're missing this
WHERE [membersservices].[mobilenumber] = INSERTED.[mobilenumber]
    AND [membersservices].[sid] = INSERTED.[sid]  


UPDATE membersservices  
 SET  membersservices.[last_status] = INSERTED.enable
FROM membersservices     
JOIN INSERTED ON ...  <-- you're missing this


INSERT INTO membersservices (...)
SELECT ...
FROM INSERTED ...  <-- you're missing this
Run Code Online (Sandbox Code Playgroud)

除此之外,您的逻辑在并发下是不正确的。您应该使用单个MERGE语句来执行更新和插入操作。