【问题标题】:How to realize this in Transact SQL ( SQL Server 2008 )如何在 Transact SQL (SQL Server 2008) 中实现这一点
【发布时间】:2010-06-07 22:02:15
【问题描述】:

我只想要一个像这个 postgresql 版本这样的更新触发器......在我看来,没有新的。和老。在 MSSQL 中?

CREATE OR REPLACE FUNCTION "public"."ts_create" () RETURNS trigger AS
DECLARE
BEGIN
  NEW.ctime := now();
  RETURN NEW;
END;

已经在 Google 上搜索过了,但遗憾的是什么都没找到……有什么想法吗?

更新: ……这样吗?

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();

当然两者都不起作用;)

【问题讨论】:

  • 为什么要使用触发器作为默认约束?
  • 是的,不好的例子..但我需要它用于“mtime”然后......

标签: sql sql-server postgresql triggers


【解决方案1】:

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 表可能包含多行。

【讨论】:

  • @David 更新了几个例子。
【解决方案2】:

对于触发器,SQL 提供名为“已插入”和“已删除”的虚拟表。这是我使用了几个月的例程触发器示例(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

(注意这是一个“后”触发器,所以我只需要运行一个 UPDATE。)

【讨论】:

    【解决方案3】:

    首先,对于插入,您可以将默认值设置为 GETDATE()。

    然后在更新时,尝试这样的操作:

    CREATE TRIGGER TimeUpdater ON Auctions FOR UPDATE
    AS
    UPDATE auctions 
    SET mtime = GETDATE() 
    FROM UPDATED u
    WHERE Id = u.Id
    

    【讨论】:

      猜你喜欢
      • 2010-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多