0

列を持つテーブルAがありますFamily ID, Name, Addr。テーブル内で最近変更された行を見つけるにはどうすればよいですか?これは、テーブルに列を追加せずに実行できますか?

4

3 に答える 3

2

いいえ、SQL Serverは、行がテーブルに追加されたとき、または変更されたときを追跡しません。列を追加してこれを行う必要があります。

ALTER TABLE dbo.A ADD RowAdded DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;

もちろん、これにより既存のすべての行が現在に設定されるため、今後は新しい行に対してのみ機能します。時間も変更したい場合は、列を追加できます。

ALTER TABLE dbo.A ADD RowChanged DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;

そして、トリガーで最新の状態に保ちます。

CREATE TRIGGER dbo.A_modified
ON dbo.A
FOR UPDATE 
AS
BEGIN
  UPDATE A SET RowChanged = CURRENT_TIMESTAMP
    FROM dbo.A as A INNER JOIN inserted AS i
    ON A.ID = i.ID;
END
GO
于 2012-07-19T12:16:25.607 に答える
0

変更時刻(またはタイムスタンプ)も書き込まない限り、これらの行を見つけることはできません。

変更されたIDをログに記録するトリガーを追加することもできますが、それはより良い解決策のようには思えません。

DMLステートメントによって変更されたデータを検索する場合は、OUTPUT句を使用できます。

于 2012-07-19T12:12:58.523 に答える
0

これを行う最も簡単な方法は、'lastUpdated`列を追加することです。それを除けば、これを達成するための本当に簡単な方法はありません。

于 2012-07-19T12:15:49.127 に答える