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代码移动到触发器中.