XML 데이터에 비즈니스 논리 추가Add Business Logic to XML Data

이 항목은 다음에 적용됩니다.예SQL Server(2008부터)아니요Azure SQL Database아니요Azure SQL Data Warehouse 아니요병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse 비즈니스 논리를 여러 가지 방식으로 XML 데이터에 추가할 수 있습니다. Your business logic can be added to XML data in several ways:

  • XML 데이터의 삽입 및 수정 중에 도메인 특정 제약 조건을 강화하도록 행 또는 열 제약 조건을 작성할 수 있습니다.You can write row or column constraints to enforce domain-specific constraints during insertion and modification of XML data.

  • 열에서 값을 삽입 또는 업데이트할 때 발생되는 트리거를 XML 열에 작성할 수 있습니다.You can write a trigger on the XML column that fires when you insert or update values in the column. 이 트리거는 도메인 특정 유효성 검사 규칙을 포함하거나 속성 테이블을 채울 수 있습니다.The trigger can contain domain-specific validation rules or populate property tables.

  • 데이터베이스 엔진에 관리 코드를 실행하는 기능이 포함됩니다.The Database Engine includes the ability execute managed code. 이 CLR(공용 언어 런타임) 통합을 사용하여 XML 값을 전달하는 관리 코드에 함수를 작성하고 System.Xml 네임스페이스에서 제공되는 XML 처리 기능을 사용할 수 있습니다.You can use this common language runtime (CLR) integration to write functions in managed code to which you pass XML values, and use XML processing capabilities provided by the System.Xml namespace. 한 예는 XSL 변환을 XML 데이터에 적용하는 것입니다.An example is to apply XSL transformation to XML data. 또는 XML을 하나 이상의 관리 클래스로 역직렬화하고 관리 코드를 사용하여 작업할 수 있습니다.Alternatively, you can deserialize the XML into one or more managed classes and operate on them by using managed code.

  • 비즈니스 요구에 맞게 XML 열에서 처리를 시작하는 Transact-SQL 저장 프로시저와 함수를 작성할 수 있습니다.You can write Transact-SQL stored procedures and functions that start the processing on the XML column for your business needs.

예제: XSL 변환 적용Example: Applying XSL Transformation

파일에 저장된 xml 데이터 형식 인스턴스와 XSL 변환을 수락하고, XML 데이터에 XSL 변환을 적용하고, 변환된 XML을 결과로 반환하는 CLR 함수 TransformXml() 를 고려해 보세요.Consider a CLR function TransformXml() that accepts an xml data type instance and an XSL transformation stored in a file, applies the transformation to the XML data, and then returns the transformed XML in the result. 다음은 C#으로 작성된 기초 함수입니다.Following is a skeleton function that is written in 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-SQLTransact-SQL 함수를 만든 후 다음 쿼리에서와 같이 TransformXml() 에 해당하는 SqlXslTransform()함수를 Transact-SQL로부터 호출할 수 있습니다.After the assembly is registered and a user-defined Transact-SQLTransact-SQL function is created, SqlXslTransform() corresponding to TransformXml(), the function can be invoked from Transact-SQL as shown in the following query:

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

쿼리 결과에는 변환된 XML의 행 집합이 포함됩니다.The query result contains a rowset of the transformed XML.

SQL ServerSQL Server 의 CLR 통합은 XML 데이터를 테이블 또는 속성 승격으로 분해하고 System.Xml 네임스페이스에 있는 관리 클래스를 사용하여 XML 데이터를 쿼리할 수 있는 가능성을 확장합니다.The CLR integration into SQL ServerSQL Server expands the possibilities for decomposing XML data into tables or property promotion, and querying XML data by using managed classes in the System.Xml namespace. 자세한 내용은 XML 데이터(SQL Server)를 참조하세요.For more information, see XML Data (SQL Server).