我只想要像这个postgresql版本的更新触发器...在我看来没有新的。和老人。在MSSQL中?
CREATE OR REPLACE FUNCTION "public"."ts_create" () RETURNS trigger AS
DECLARE
BEGIN
NEW.ctime := now();
RETURN NEW;
END;
已经谷歌了,但遗憾的是没有发现......想法?
更新: 是的,像这样?
CREATE TRIGGER tr01 ON Auctions for insert
As
update auctions set mtime = GETDATE() where Id = inserted.Id;
或者这个:
CREATE TRIGGER tr01 ON Auctions for insert
As
inserted.ctime := GETDATE();
当然没有工作;)
答案 0 :(得分:4)
In SQL Server伪表称为INSERTED and UPDATED。
我会在特定示例的ctime列上使用默认约束,但是:
CREATE TRIGGER schema.tbl_name_insert ON schema.tbl_name
AFTER INSERT
AS
SET NOCOUNT ON
UPDATE schema.tbl_name
SET mtime = getdate()
FROM schema.tbl_name
INNER JOIN JOIN INSERTED
ON schema.tbl_name.PK = INSERTED.PK
或
CREATE TRIGGER schema.tbl_name_insert ON schema.tbl_name
AFTER INSERT
AS
SET NOCOUNT ON
UPDATE schema.tbl_name
SET mtime = getdate()
FROM schema.tbl_name
WHERE schema.tbl_name.PK IN (SELECT PK FROM INSERTED)
触发器会为整个INSERT语句触发一次,因此,通常,INSERT AND DELETED表可能包含多行。
答案 1 :(得分:3)
对于触发器,SQL提供名为“inserted”和“deleted”的虚拟表。这是我已经实施了几个月的示例例程触发器(SQL 2005):
CREATE TRIGGER [MAP].[TR_iu_MyTable__LastUpdated]
on [dbo].[MyTable]
after insert, update
AS
SET NOCOUNT on
UPDATE MAP.MyTable
set LastUpdated = getdate()
where MyTableId in (select MyTableId from inserted)
GO
(请注意,这是一个“after”触发器,因此我只需要运行UPDATE。)
答案 2 :(得分:1)
首先,对于插入,您可以将默认值设置为GETDATE()。
然后在更新时,尝试这样的事情:
CREATE TRIGGER TimeUpdater ON Auctions FOR UPDATE
AS
UPDATE auctions
SET mtime = GETDATE()
FROM UPDATED u
WHERE Id = u.Id