的SQL Server触发更新
问题描述:
我有下面的表:的SQL Server触发更新
ID | CLIENT_SYNCED_TIME | NAME | DESCRIPTION | LM_TIME
的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
答
试试这个。
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
或者
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
答
感谢Bhosale先生
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
如果有一个'UPDATE'声明,它更新'CLINET_SYNCED_TIME'(等栏目),但偏偏它设置为它已具有相同的价值,那么应该发生什么? –
这不是问题先生..我只是想让触发器不用担心“CLIENT_SYNCED_TIME”列 – Pradeep
看看:http://stackoverflow.com/questions/17768608/what-is-the-practical-use- sql-server-with-example –