次の方法で共有


XML データへのビジネス ロジックの追加

適用対象:SQL ServerAzure SQL Database

XML データにはいくつかの方法でビジネス ロジックを追加できます。

  • XML データの挿入や変更のときに領域固有の制約を強制する行制約または列制約を記述できます。

  • 列の値を挿入または更新したときに起動するトリガーを XML 列に記述できます。 トリガーには領域固有の検証規則を含めたり、トリガーを使用してプロパティ テーブルにデータを格納することができます。

  • データベース エンジンには、マネージド コードを実行する機能が含まれています。 この共通言語ランタイム (CLR) 統合を使用すると、XML 値を渡す関数をマネージド コードに記述し、System.Xml 名前空間の提供する XML 処理機能を使用できます。 たとえば、XML データに XSL 変換を適用する場合に使用します。 または、XML のシリアル化を解除して 1 つ以上のマネージド クラスにし、マネージド コードで操作することができます。

  • ビジネス ニーズに合わせて XML 列の処理を開始する Transact-SQL ストアド プロシージャや関数を記述できます。

例: XSL 変換を適用する

TransformXml() データ型のインスタンスおよびファイルに保存されている XSL 変換を受け取り、XML データに変換を適用し、変換後の XML を結果として返す CLR 関数 を考えてみます。 次に示すのは、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);
}

アセンブリを登録し、 SqlXslTransform() に対応する のユーザー定義関数 TransformXml() を作成すると、次のクエリに示すように Transact-SQL からその関数を呼び出すことができます。

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

クエリの結果には、変換後の XML の行セットが含まれます。

SQL Server に CLR を統合することによって、XML データをテーブルに分解するかプロパティをプロモーションさせてから、System.Xml 名前空間のマネージド クラスを使用して XML データにクエリを実行できるようになります。 詳細については、「XML データ (SQL Server)」を参照してください。