【问题标题】:How to use "inserted" keyword如何使用“插入”关键字
【发布时间】:2021-07-11 03:58:28
【问题描述】:

我正在尝试在 SQL Server 中创建触发器,并且 SQL 语句看起来像

CREATE TRIGGER dbo.INSERTTORNADOUSER 
   ON  Monarch.dbo.GROUPUSER 
   AFTER  INSERT
AS 
BEGIN
    SET NOCOUNT ON;
    DECLARE 
@UserName nvarchar(10),
SELECT @UserName = U.U_NAME FROM USERID U WHERE U.U_ID = inserted.GU_U_ID

我在使用 inserted 关键字时遇到错误。错误信息如下:

无法绑定多部分标识符inserted.GU_U_ID

我使用的表结构看起来像

Table : USERID

Columns :
U_ID
U_NAME
U_PASSWORD

Table : GROUPUSER

Columns:
GU_ID
GU_U_ID

我读了这个article 以供参考。只是需要一些帮助来了解问题所在。

谢谢。

【问题讨论】:

  • inserted 是一个只存在于触发器中的特殊表。您的查询应该是 FROM USERID U JOIN INSERTED I ON U.U_ID = I.GU_U_ID 并且 inserted 可能包含超过 1 行。所以你的查询SELECT @UserName = U.U_NAME 将无法处理
  • 感谢您的信息,对于评论的第二部分,我是否应该考虑循环 Inserted 表来处理 SELECT @UserName = U.U_NAME 的场景
  • 请不要循环播放。触发器的目标是什么?
  • 目标是每当新记录插入到 GROUPUSER 中时,在另一个表 (USERUPDATELOG) 中添加一个新行。

标签: sql sql-server database triggers


【解决方案1】:

不要使用变量。您可以使用表INSERTEDUSERIDJOIN 结果直接插入USERUPDATELOG

INSERT INTO USERUPDATELOG ( . . .)
SELECT . . . 
FROM   INSERTED I 
       INNER JOIN USERID U WHERE U.U_ID = I.GU_U_ID

【讨论】:

    猜你喜欢
    • 2010-12-18
    • 2015-06-03
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-24
    • 2021-03-08
    相关资源
    最近更新 更多