【问题标题】:SQL Server trigger - Insert into new table when old table has an update/insertSQL Server 触发器 - 当旧表有更新/插入时插入新表
【发布时间】:2015-11-06 19:23:52
【问题描述】:

我正在尝试创建一种跟踪触发器,它将所有更改/新条目从一个表插入到一个新表中。这样做的目的是查看谁是最后一个修改记录的用户。

这是我使用的代码:

CREATE TRIGGER SV00300_Tracking ON sv00300
FOR INSERT
AS
    INSERT INTO [GP_Tracking].[dbo].[SV00300] (Col1, col2, col3)
        SELECT Col1, col2, col3
        FROM inserted
go

【问题讨论】:

  • 好的。什么数据库?你试过什么?你收到错误了吗?什么错误?
  • SQL 服务器。我已经尝试过插入触发器,但我认为我在这里太简单了。我没有收到错误,但我没有产生我想要的结果。基本上我只想查看对表所做的所有更改,但要将这些记录放入单独的表中。
  • [GP_Tracking].[dbo].[SV00300] 与 sv00300 是不同的表吗?他们有相同的名字。但也许您正试图将数据移动到不同数据库中的表中?您运行将行插入到定义触发器的表中的insert 语句是什么?当您运行 insert 语句时,究竟会发生什么?你说你没有得到你想要的结果,但你没有告诉我们你期望的结果。
  • GP_Tracking.DBO.sv00300 是不同数据库中的表。现在的结果绝对没有,我期望的结果是“我只想查看对表所做的所有更改,但要将这些记录放入单独的表中”我想查看对原始 sv00300 表所做的所有修改。也许我应该以不同的方式解决这个问题?
  • 表在同一台服务器上吗?

标签: sql sql-server triggers sql-update insert-update


【解决方案1】:
CREATE TRIGGER SV00300_Tracking ON sv00300
AFTER INSERT, UPDATE
AS

INSERT INTO [GP_Tracking].[dbo].[SV00300]
        (Col1, col2, col3
      )
    SELECT
        Col1, col2, col3
        FROM inserted

go

应该这样做!

【讨论】:

  • 大吃一惊!这有点太简单了。
  • 您还应该考虑在触发器中使用同义词而不是硬编码的 database.schema.table。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多