0

職場のデータベースに問題があります。現在、監査が実施されていますが、扱いにくく、多くのメンテナンスが必要であり、いくつかの点で不十分です。なので交換しています。

私はこれをできるだけ一般的な方法で行いたいと考えており、テーブルを設計し、すべてがどのようにリンクして更新されるかを説明しました。

さて、これですべて問題ありませんが、これらの監査テーブルにレコードを挿入する一般的な方法を記述できるようにしたいと考えています。(変更する各テーブルの列ごとにコマンドを入力する必要はありません。)

ストアド プロシージャ内に、テーブル内のすべての列を反復処理する方法はありますか? そして、これをいくつかのテーブルで動作し、追加された列などを自動的にピックアップして監査するように書きたいと思います。

何か案は?

編集:明確にする必要があると思います。テーブル内のデータを監査します。ただし、同じテーブルを使用して、データベース内のすべてのテーブルの監査データを保存します。

通常、更新が発生すると複数のテーブルで発生するため、トリガーを使用できませんが、これらの更新をすべて単一の変更セットの一部にしたいと考えています。

単一の Stored Proc 内からすべての更新を実行できるため、これは問題ではありません。更新されたすべてのフィールドを取得し、どのフィールドが変更されたかを把握し、それらの変更されたフィールドを監査テーブルに挿入できるループのような方法を好むだけです。

そして、各列のifステートメントとinsertステートメントの長いリストを持たずにこれを行いたいと思います。(これを一般的なループで行うことにより、追加された列が自動的に処理され、削除された列に悩まされることはありません)

4

5 に答える 5

1

「追加された列」によって、DDLの監査を検討していると思います。SQL 2005 を使用している場合は、このリンクが必要です。

SQL 2005 を使用しない場合は、多くの SQL スキーマ比較ツールのいずれかを使用することをお勧めします。たとえば、SQL Red Gates ツール セットに何かが含まれている可能性があります。

ツール用の $ がない場合は、information_schema.tables および information_schema.columns に対して定期的にクエリを実行するだけでよいでしょう。これらを永続的なテーブルに定期的にキャプチャすることで、行が増えたり失われたりしたとき (したがって、スキーマの変更が発生したとき) を特定できます。

代わりにデータ監査を行っている場合は、information_schema.tables と information_schema.columns を使用して、いくつかのトリガーをコード生成する必要があります。

于 2009-01-08T18:51:11.543 に答える
0

オプションの場合は、SQL Server 2008にアップグレードして、[データキャプチャの変更]をオンにします。

于 2009-01-08T19:34:33.627 に答える
0

パフォーマンスに関する考慮事項がありますが、挿入トリガーと更新トリガーをすべてのテーブルに追加し、トリガーを監査テーブルに挿入することができます。

于 2009-01-08T18:44:46.767 に答える
0

DDL トリガーを使用してください (SQL Server 2005 以降を使用している場合)。

http://www.sqlteam.com/article/using-ddl-triggers-in-sql-server-2005-to-capture-schema-changes

http://technet.microsoft.com/en-us/library/ms189871.aspx

于 2009-01-08T18:53:03.617 に答える
0

これは、どのテーブルと列が更新され、監査テーブルの挿入ステートメントを生成するかをトラップできるデータ アクセス レイヤーを使用している場合に実行できます。ストアドプロシージャで?どのストアド プロシージャですか。更新を行う単一のものはありますか? それとも、テーブルごとに 1 つ作成していますか?

于 2009-01-08T18:54:07.450 に答える