У меня есть система аудита / ведения журнала, которая использует сырой XML для представления действий, выполняемых приложением. Я хотел бы значительно улучшить эту систему, используя столбец XML в таблице в базе данных приложения SQL Server.
Каждая строка в таблице будет содержать одну запись журнала, и каждая запись должна содержать один или несколько тегов, которые используются для описания действия в семантической форме, что позволяет мне искать способы, которые соответствуют потребностям аудита приложения, пример :
<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, и любая помощь приветствуется. Спасибо!