插入了知道新记录的SQL Server 2005

时间:2012-02-11 19:33:10

标签: java sql-server tsql

有没有办法找出是否插入新记录而不是在sql server 2005中写入触发器。(它可以是tsql或java ...) 由于供应商不允许右侧触发DB ... 另外如何生成一个包含新插入行数据的文件..是一个很好的解决方案吗?

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我会建议一个最好的做法,也可以帮助你在这里。如果限制更新和插入仅通过存储过程,则可以使用该proc来写出审计记录或只更新时间/日期字段。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我认为您需要定义“有没有办法找出是否插入新记录而不是写入触发器”。触发器基本上是SQL中的事件处理程序。那么你是否希望在将新行插入表格时触发类似触发器的触发器?如果是这样,答案是肯定的,它叫做SQL Server Notification Services。

这是一个beginners article,但我相信你只能谷歌“sql server notification”并获得大量的结果。

这是另一篇好文章:Using SqlDependency To Monitor SQL Database Changes