Adicionando lógica comercial
Sua lógica comercial pode ser adicionada a dados XML de vários modos:
Você pode escrever restrições de linha ou de coluna para impor restrições específicas ao domínio durante inserção e modificação de dados XML.
Você pode escrever um gatilho na coluna XML que seja disparado quando valores forem inseridos ou atualizados na coluna. O gatilho pode conter regras de validação específicas ao domínio ou popular tabelas de propriedades.
A partir do SQL Server 2005, o Mecanismo de Banco de Dados inclui a capacidade de executar código gerenciado. É possível usar essa integração de CLR (Common Language Runtime) para escrever funções em código gerenciado para as quais você passa valores XML, e usar recursos de processamento do XML fornecidos pelo namespace System.Xml. Um exemplo é aplicar a transformação XSL a dados XML. Como alternativa, é possível desserializar o XML em uma ou mais classes gerenciadas e operar sobre elas usando código gerenciado.
É possível escrever funções e procedimentos armazenados Transact-SQL que começam o processamento na coluna XML para suas necessidades comerciais.
Exemplo: Aplicando XSL Transformation
Considere uma função CLR TransformXml() que aceita uma instância de tipo de dados xml e uma transformação XSL armazenada em um arquivo, aplica a transformação nos dados XML e retorna o XML transformado no resultado. O seguinte é um função em esqueleto escrita em 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);
}
Após o assembly ser registrado e a função Transact-SQL definida pelo usuário ser criada, SqlXslTransform() correspondente a TransformXml(), a função pode ser invocada no Transact-SQL conforme mostrado na consulta a seguir:
SELECT SqlXslTransform (xCol, 'C:\MyFile\xsltransform.xsl')
FROM T
WHERE xCol.exist('/book/title/text()[contains(.,"custom")]') =1
O resultado da consulta contém um conjunto de linhas do XML transformado.
A integração CLR no SQL Server expande as possibilidades de decomposição de dados XML em tabelas ou promoção de propriedades e consultar dados XML usando classes gerenciadas no namespace System.Xml. Para obter mais informações, consulte Visão geral da integração CLR (Common Language Runtime).