SQL触发器 - 如何获取更新的值?

nas*_*ski 7 sql t-sql sql-server triggers

如何在SQL触发器中获取更新记录的值 - 如下所示:

CREATE TRIGGER TR_UpdateNew
   ON  Users
   AFTER UPDATE
AS 
BEGIN
    SET NOCOUNT ON;

    EXEC UpdateProfile (SELECT UserId FROM updated AS U);

END
GO
Run Code Online (Sandbox Code Playgroud)

显然这不起作用,但你可以看到我想要的东西.

Mat*_*lie 12

提供您确定只会更新一个值,您可以这样做...

CREATE TRIGGER TR_UpdateNew
   ON  Users
   AFTER UPDATE
AS 
BEGIN
    SET NOCOUNT ON;

    DECLARE @user_id INT
    SELECT
      @user_id = inserted.UserID
    FROM
      inserted
    INNER JOIN
      deleted
        ON inserted.PrimaryKey = deleted.PrimaryKey
        -- It's an update if the record is in BOTH inserted AND deleted

    EXEC UpdateProfile @user_id;

END
GO
Run Code Online (Sandbox Code Playgroud)

如果可以一次更新多个值,则此代码只会处理其中一个值.(虽然不会出错.)

您可以使用游标,或者如果它是SQL Server 2008+,您可以使用表变量.

或者,更常见的是,只需将StoredProcedure代码移动到触发器中.