2012-02-11 17 views
0

SQL Server 2005でトリガーを作成する以外に新しいレコードが挿入されているかどうかを調べる方法はありますか?(tsqlまたはjava ...) ベンダーはそこに右のトリガを許可していません... また、新しく挿入された行のデータを持つファイルを生成する方法.. bcpは良い解決策ですか?SQL Server 2005で新しいレコードが挿入されていることを確認しました

+0

タイムスタンプが足りませんか?またはフラグ: 'new_from_last_checkビットデフォルト0' – danihp

答えて

0

私はここでもあなたを助けるかもしれないベストプラクティスを提案します。ストアド・プロシージャーのみを実行するように更新および挿入を制限する場合は、そのプロシージャーを使用して、監査レコードを書き出すか、単に時刻/日付フィールドを更新することもできます。

0

表に自動増分主キーまたはcreateDate列がありますか?定期的に目を覚ますcronジョブを作成し、最後にcronジョブを実行してからデータベースに新しいものがあるかどうかを調べることができます。

+0

CDCが役立ちますか?私は2008年にリンクとチュートリアルを取得していますが、SQL Server 2005を使用しています.... – paramupk

1

監査テーブルを定義してから、INPUTまたはUPDATEステートメントにDELETE(too、btw)にOUTPUTコマンドを追加できます。

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 Notification Servicesと呼ばれます。

ここにはbeginners articleがありますが、Googleの「SQL Server通知」だけで検索結果を得ることができます。

もう1つの良い記事です:Using SqlDependency To Monitor SQL Database Changes

+0

CDCは役に立ちますか?私は2008年にリンクとチュートリアルを取得していますが、SQL Server 2005を使用しています。 – paramupk

+0

ここでは2005/VS2005のSqlDependencyを紹介します。 http://www.codeproject.com/Articles/12335/Using-SqlDependency-for-data-change-events –

関連する問題