2012-02-11 45 views
0

有沒有什麼方法可以找出是否插入新的記錄,而不是在sql server 2005中寫入觸發器(它可以是tsql或java ...) 由於供應商是不允許正確觸發那裏DB ... 也如何生成一個文件與新插入的行數據..是bcp一個很好的解決方案??SQL Server 2005知道新記錄被插入

+0

時間戳是不夠的?或者是一個標誌:'new_from_last_check位默認0' – danihp 2012-02-11 20:13:50

回答

0

我會建議一個最佳實踐,可能也會幫助你在這裏。如果限制更新和插入僅通過存儲過程,則可以使用該過程寫出審計記錄或僅更新時間/日期字段。

0

該表是否具有自動增量主鍵或createDate列?您可以編寫定期喚醒的cron作業,並查詢自上次運行cron作業以來是否有新的命中數據庫。

+0

CDC會幫忙?我在2008年獲得鏈接和教程,但我正在使用SQL Server 2005 .... – paramupk 2012-02-15 03:26:29

1

您可以定義一個審計表,然後將OUTPUT命令添加到您的INPUT或UPDATE語句(DELETE也是,btw)。

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 
0

我想你需要定義「有沒有什麼辦法來確定是否插入新的記錄,而不是寫入觸發器」。觸發器基本上是SQL中的事件處理程序。那麼你是否想要有一種觸發器,只要將新行插入到表中就會觸發?如果是這樣,答案是肯定的,它被稱爲SQL Server通知服務。

這裏是beginners article,但我相信你可以只是谷歌「SQL服務器通知」,並得到噸的結果。

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

+0

CDC將幫助?我在2008年獲得鏈接和教程,但我正在使用sql server 2005. – paramupk 2012-02-20 11:19:18

+0

這是SqlDependency for 2005/VS2005的一個。 http://www.codeproject.com/Articles/12335/Using-SqlDependency-for-data-change-events – 2012-02-21 15:42:46