2

私は次の管理クエリを継承し、何が返されるかを完全に理解して時々実行しました。

--Loop until the Cursor was not able to fetch
WHILE (@@Fetch_Status >= 0)
BEGIN
    --Dump the results of the sp_spaceused query to the temp table
    INSERT  #TempTable
        EXEC sp_spaceused @TableName

    --Get the next table name
    FETCH NEXT FROM tableCursor INTO @TableName
END

--get rid of the Cursor
CLOSE tableCursor
DEALLOCATE tableCursor



--Select TABLE properties with SIZE -- Final step
SELECT name, 
convert(date,create_date) as CreateDate, 
convert(date,modify_date) as ModifyDate, 
numberofRows, 
dataSize

FROM sys.objects
join #temptable tm on
tm.tablename = sys.objects.name
WHERE type  in ('U')

order by modify_date 
GO

次のフィールドは何ですか?:

  1. "create_date" ... "CREATE TABLE ..." が実行されたのはいつだと思います
  2. "modify_date" ...テーブル スキーマが最後に変更されたのはいつですか?

それらのいずれかが、データが最後にテーブルにあったDELETEDINSERTED、テーブルにあったかを教えてくれますか?
そうでない場合、どうすればこの情報を取得できますか?

4

1 に答える 1

6

BOLが言うこと

変更日 - ALTER ステートメントを使用してオブジェクトが最後に変更された日付。オブジェクトがテーブルまたはビューの場合、テーブルまたはビューのクラスター化インデックスが作成または変更されると、modify_date も変更されます。

誰かが列を追加したり、テーブルのスキーマを変更した瞬間です

デフォルトでは、その情報(誰かが値を挿入/削除したとき)は保存されません

誰かがテーブルに値を挿入した時間が必要な場合は、それを実装する必要がChangeDate datetimeあります。テーブルに列を追加し、適切な値を挿入するトリガーを追加できますが、データが削除されたときは保持されません

通常、データの変更をログに記録する場合は、ログに記録するテーブルと同様のテーブルを作成し、「DataChange、操作、ユーザー」などの列を追加して、UPDATE、INSERT、DELETE の DML トリガーを実装することで実装できます。

または、データの変更を追跡するためにSQLサーバーの変更データを使用しますが、個人的にはそれを使用したことはありません:)

于 2013-01-18T10:24:42.863 に答える