Udostępnij za pośrednictwem


Dodawanie logiki biznesowej do danych XML

Dotyczy:programu SQL ServerAzure SQL Database

Logikę biznesową można dodać do danych XML na kilka sposobów:

  • Ograniczenia dotyczące wierszy lub kolumn można napisać, aby wymusić ograniczenia specyficzne dla domeny podczas wstawiania i modyfikowania danych XML.

  • Wyzwalacz można napisać w kolumnie XML, która jest uruchamiana podczas wstawiania lub aktualizowania wartości w kolumnie. Wyzwalacz może zawierać reguły walidacji specyficzne dla domeny lub wypełnić tabele właściwości.

  • Aparat bazy danych umożliwia wykonywanie kodu zarządzanego. Tej integracji środowiska uruchomieniowego języka wspólnego (CLR) można używać do pisania funkcji w kodzie zarządzanym, do którego są przekazywane wartości XML, i korzystać z możliwości przetwarzania XML udostępnianych przez przestrzeń nazw System.Xml. Przykładem jest zastosowanie transformacji XSL do danych XML. Alternatywnie można deserializować kod XML w co najmniej jedną klasę zarządzaną i wykonywać na nich operacje przy użyciu kodu zarządzanego.

  • Można napisać procedury składowane i funkcje w Transact-SQL, które rozpoczynają przetwarzanie kolumny XML do potrzeb biznesowych.

Przykład: stosowanie transformacji XSL

Rozważ funkcję CLR TransformXml(), która akceptuje wystąpienie typu danych XML i przekształcenie XSLT przechowywane w pliku, stosuje przekształcenie do danych XML, a następnie zwraca przekształcony XML w wyniku. Poniżej znajduje się szkieletowa funkcja napisana w 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);
}

Po zarejestrowaniu zestawu i utworzeniu funkcji Transact-SQL zdefiniowanej przez użytkownika SqlXslTransform() odpowiadającej TransformXml()można wywołać funkcję z Transact-SQL, jak pokazano w poniższym zapytaniu:

SELECT SqlXslTransform (xCol, 'C:\MyFile\xsltransform.xsl')
FROM    T
WHERE  xCol.exist('/book/title/text()[contains(.,"custom")]') = 1;

Wynik zapytania zawiera zestaw wierszy przekształconego kodu XML.

Integracja środowiska CLR z programem SQL Server rozszerza możliwości przekształcania danych XML w tabele lub promowania właściwości oraz wykonywania zapytań dotyczących danych XML przy użyciu klas zarządzanych w przestrzeni nazw System.Xml. Aby uzyskać więcej informacji, zobacz XML Data (SQL Server).