0

それが起こった後、テーブルの更新コマンドの変更を表示することが可能かどうか疑問に思っていますか?

トランザクションログにはこの種の情報が保存されますか。つまり、これは以前の値/現在の値です。これは新しい値/変更された値です。

これが可能かどうかわからない。サーバーはmssql2008です

4

2 に答える 2

0

OUTPUTを使用して、変更を別のテーブルに挿入したり、変更の結果セットを返したりすることができます。

set nocount on
DECLARE @Table     table (PK int, col1 varchar(5))
DECLARE @SavedPks  table (PK int)

INSERT INTO @Table VALUES (1,'g')
INSERT INTO @Table VALUES (2,'g')
INSERT INTO @Table VALUES (3,'g')
INSERT INTO @Table VALUES (4,'g')
INSERT INTO @Table VALUES (5,'x')
INSERT INTO @Table VALUES (6,'x')
set nocount off

UPDATE @Table
    SET col1='xyz'
    OUTPUT INSERTED.PK INTO @SavedPks --save in a table
    OUTPUT 'result set',INSERTED.PK, INSERTED.col1 AS new_col1, DELETED.col1 AS old_Col1 --result set
    WHERE col1='g'

select * from @Table
select * from @SavedPks

出力:

           PK          new_col1 old_Col1
---------- ----------- -------- --------
result set 1           xyz      g
result set 2           xyz      g
result set 3           xyz      g
result set 4           xyz      g

(4 row(s) affected)

PK          col1
----------- -----
1           xyz
2           xyz
3           xyz
4           xyz
5           x
6           x

(6 row(s) affected)

PK
-----------
1
2
3
4
于 2011-09-29T15:01:45.650 に答える
0

トランザクションログには情報が含まれていますが、デコードは簡単ではありません-トランザクションログに簡単な更新ステートメントをデコードする例をブログに投稿しました-http://sqlfascination.com/2010/02/21/decoding- a-simple-update-statement-within-the-transaction-log /

ただし、実行されている更新によっては、ログのエントリがはるかに複雑になり、それらをデコードする方法に関するドキュメントがありません。それらをリバースエンジニアリングすることは非常に困難です。

ログを検査するこの手法を使用してデータを取得することは決してお勧めしません。内部学習の観点/フォレンジックの観点からのみ調査する価値があります。

于 2011-09-30T19:24:15.853 に答える