Pra*_*eep 5 sql sql-server triggers
我有一个包含以下列的表格:
ID | CLIENT_SYNCED_TIME | NAME | DESCRIPTION | LM_TIME
Run Code Online (Sandbox Code Playgroud)
LM_TIME当任何其他列值更新时,该列将由触发器自动设置。
但是我希望LM_TIME....在列更新时不会被触发器CLIENT_SYNCED_TIME更新。
我现在正在使用下面的触发器,它会LM_TIME在任何列值更改时更新。
只是我只想让触发器不用担心CLIENT_SYNCED_TIME列。为了达到这个效果,我必须做哪些修改?
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[updateLM_TIME]
ON [dbo].[INSTITUTIONS]
AFTER INSERT, UPDATE
AS
UPDATE dbo.INSTITUTIONS
SET lm_time = CONVERT(DATETIME, CONVERT(VARCHAR(20), GETDATE(), 120))
WHERE ID IN (SELECT DISTINCT ID FROM Inserted)
GO
Run Code Online (Sandbox Code Playgroud)
尝试这个。
USE [lms_db]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[updateLM_TIME]
ON [dbo].[INSTITUTIONS]
AFTER INSERT, UPDATE
AS
IF UPDATE(ID) or UPDATE(NAME) or UPDATE(DESCRIPTION)
BEGIN
UPDATE dbo.INSTITUTIONS
SET lm_time = CONVERT(DATETIME, CONVERT(VARCHAR(20), GETDATE(), 120))
WHERE ID IN (SELECT DISTINCT ID FROM Inserted)
END
Run Code Online (Sandbox Code Playgroud)
或者
AFTER INSERT, UPDATE
AS
IF UPDATE(CLIENT_SYNCED_TIME)
PRINT 'Not Updated';
ELSE
BEGIN
UPDATE dbo.INSTITUTIONS
SET lm_time = CONVERT(DATETIME, CONVERT(VARCHAR(20), GETDATE(), 120))
WHERE ID IN (SELECT DISTINCT ID FROM Inserted)
PRINT 'Updated';
END
Run Code Online (Sandbox Code Playgroud)
感谢博萨尔先生
USE [lms_db]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[updateLM_TIME]
ON [dbo].[INSTITUTIONS]
AFTER INSERT, UPDATE
AS
IF NOT UPDATE(CLIENT_SYNCED_TIME)
BEGIN
UPDATE dbo.INSTITUTIONS
SET lm_time = CONVERT(DATETIME, CONVERT(VARCHAR(20), GETDATE(), 120))
WHERE ID IN (SELECT DISTINCT ID FROM Inserted)
END
Run Code Online (Sandbox Code Playgroud)