生の XML を使用してアプリケーションによって実行されるアクションを表す監査/ログ システムがあります。アプリケーションの SQL Server データベース内のテーブルで XML 列を使用して、このシステムを大幅に改善したいと考えています。
テーブルの各行には 1 つのログ エントリが含まれ、各エントリには 1 つ以上のタグが含まれている必要があります。これらのタグは、アプリケーションの監査のニーズに一致する方法で検索できるように、セマンティックな方法でアクションを記述するために使用されます。例:
<updateInvoice id="5" userId="7" /><fieldUpdate name="InvoiceDate" /><invoice /><update />
<deleteInvoice id="5" userId="6" /><invoice /><delete />
私の意図は、タグと属性の組み合わせを指定して行を含めるか除外することにより、このテーブルから行セットを返すことです (たとえば、「タグですべての行を含めinvoice
、属性で行を除外するuserId='7'
」、または「タグですべての行を含め、行をinvoice
除外する」タグ付きdelete
)
行を含めたり除外したりするタグと属性の組み合わせを表す単純なフィルター構造の組み合わせを使用して、プログラムでこれを行いたいと考えています。
私が使用する構造は次のようになります。
enum FilterInclusion { Include, Exclude };
public struct Filter
{
FilterInclusion Inclusion;
string TagName;
string? AttributeName;
object? AttributeValue;
}
私の目標は、これらのセットを受け入れ、単一の除外フィルターに一致することなく、単一の包含フィルターに一致するすべての行を返すクエリを生成することです。
このブール論理を結果の XPath 自体にエンコードする必要がありますか?それとも、出力されたクエリに複数の SELECT ステートメントを含めることを検討していますか? 私は XQuery を初めて使用しますが、助けていただければ幸いです。ありがとう!