【问题标题】:Sql server 2005 knowing new record is insertedSql server 2005 知道插入了新记录
【发布时间】:2012-02-11 19:33:10
【问题描述】:

除了在sql server 2005中写触发器之外,还有什么方法可以查明是否插入了新记录。(可以是tsql或java...) 由于供应商不允许在 DB 上正确触发... 另外如何生成包含新插入行数据的文件.. bcp 是一个好的解决方案吗??

【问题讨论】:

  • 时间戳不够?或旗帜:new_from_last_check bit default 0

标签: java sql-server tsql


【解决方案1】:

您可以定义一个审计表,然后将一个 OUTPUT 命令添加到您的 INPUT 或 UPDATE 语句(顺便说一句,DELETE 也是如此)。

create table fab4 (id int identity(1,1),FName varchar(80));
create table fab4_audit (act varchar(10),id int, FName_old varchar(80), FName_new varchar(80), ts datetime not null default(getdate()));

-- insert
insert into fab4(FName)
output
'INSERTED'
, inserted.*
into fab4_audit([act],id,FName_new)
select 'John' union all
select 'Paul' union all
select 'George' union all
select 'Ringo';
go

-- update
update f
set FName='Walrus'
output
'UPDATED'
, inserted.id
, deleted.FName
, inserted.FName
into fab4_audit([act],id,FName_old,FName_new)
from fab4 f
where FName='Paul';

-- delete
delete f
output
'DELETED'
, deleted.id
, deleted.FName
into fab4_audit([act],id,FName_old)
from fab4 f
where FName in ('John','George');
go

select * from fab4;
select * from fab4_audit;
go

【讨论】:

    【解决方案2】:

    我会建议一个最佳实践,这也可能对您有所帮助。如果您将更新和插入限制为仅通过存储过程,您可以使用该过程来写出审计记录或简单地更新时间/日期字段。

    【讨论】:

      【解决方案3】:

      表是否有一个自动递增的主键或一个 createDate 列?您可以编写一个定期唤醒的 cron 作业并查询以查看自上次运行该 cron 作业以来是否有任何新内容进入数据库。

      【讨论】:

      • CDC 会帮忙吗?我在 2008 年获得链接和教程,但我使用的是 sql server 2005 ....
      【解决方案4】:

      我认为您需要定义“除了写入触发器之外,还有什么方法可以找出是否插入了新记录”。触发器基本上是 SQL 中的事件处理程序。那么,您是否想要一个触发器之类的东西,只要将新行插入表中就会触发?如果是这样,答案是肯定的,它称为 SQL Server 通知服务。

      这里有一个beginners article,但我相信你可以通过谷歌搜索“sql server notification”并获得大量结果。

      这里还有一篇好文章:Using SqlDependency To Monitor SQL Database Changes

      【讨论】:

      • CDC 会帮忙吗??我在 2008 年获得链接和教程,但我使用的是 sql server 2005。
      • 这是 2005 / VS2005 的 SqlDependency 的一个。 codeproject.com/Articles/12335/…
      猜你喜欢
      • 2015-12-17
      • 1970-01-01
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-14
      • 1970-01-01
      • 2020-11-21
      • 1970-01-01
      相关资源
      最近更新 更多