Добавление бизнес-логики
Бизнес-логику можно добавить в XML-данные несколькими способами.
Можно создать ограничения строк или столбцов, чтобы наложить ограничения, специфические для домена, во время вставки и модификации XML-данных.
Можно написать для XML-столбца триггер, срабатывающий при вставке значений в столбец или при их обновлении. Этот триггер может определять специфические для домена правила проверки или заполнять таблицы свойств.
Начиная с версии SQL Server 2005, компонент Database Engine может выполнять управляемый код. Эту интеграцию со средой CLR можно использовать для написания в управляемом коде функций, принимающих XML-значения, и использовать средства обработки XML-данных, предоставляемые пространством имен System.Xml. Примером может служить применение преобразования XSL к XML-данным. Также можно десериализовать XML-данные в один или несколько управляемых классов и обработать их в управляемом коде.
Можно создать хранимые процедуры и функции Transact-SQL, инициирующие обработку XML-столбца в соответствии с бизнес-потребностями.
Пример. Применение преобразования XSL
Рассмотрим функцию CLR TransformXml(), которая принимает экземпляр типа данных xml и находящееся в файле преобразование XSL, применяет преобразование к XML-данным и возвращает результат преобразования. Вот ее основа, написанная на C#:
public static SqlXml TransformXml (SqlXml XmlData, string xslPath) {
// Load XSL transformation
XslCompiledTransform xform = new XslCompiledTransform();
XPathDocument xslDoc = new XPathDocument (xslPath);
xform.Load(xslDoc);
// Load XML data
XPathDocument xDoc = new XPathDocument (XmlData.CreateReader());
// Return the transformed value
MemoryStream xsltResult = new MemoryStream();
xform.Transform(xDoc, null, xsltResult);
SqlXml retSqlXml = new SqlXml(xsltResult);
return (retSqlXml);
}
После регистрации сборки и создания пользовательской функции Transact-SQLSqlXslTransform(), соответствующей TransformXml(), эту функцию можно вызывать из кода Transact-SQL, как показано в следующем запросе:
SELECT SqlXslTransform (xCol, 'C:\MyFile\xsltransform.xsl')
FROM T
WHERE xCol.exist('/book/title/text()[contains(.,"custom")]') =1
Результат выполнения этого запроса содержит набор строк преобразованных XML-данных.
Интеграция со средой CLR в SQL Server расширяет возможности продвижения свойств и декомпозиции XML-данных в таблицы, а также средства запроса XML-данных с использованием управляемых классов из пространства имен System.Xml. Дополнительные сведения см. в разделе Общие сведения об интеграции со средой CLR.