XML 데이터에 비즈니스 논리 추가

적용 대상:SQL ServerAzure SQL Database

비즈니스 논리를 여러 가지 방식으로 XML 데이터에 추가할 수 있습니다.

  • XML 데이터의 삽입 및 수정 중에 도메인 특정 제약 조건을 강화하도록 행 또는 열 제약 조건을 작성할 수 있습니다.

  • 열에 값을 삽입하거나 업데이트할 때 발생하는 XML 열에 트리거를 작성할 수 있습니다. 트리거는 도메인별 유효성 검사 규칙을 포함하거나 속성 테이블을 채울 수 있습니다.

  • 데이터베이스 엔진에는 관리 코드를 실행하는 기능이 포함되어 있습니다. 이 CLR(공용 언어 런타임) 통합을 사용하여 XML 값을 전달하는 관리 코드에 함수를 작성하고 System.Xml 네임스페이스에서 제공하는 XML 처리 기능을 사용할 수 있습니다. 예제는 XML 데이터에 XSL 변환을 적용하는 것입니다. 또는 하나 이상의 관리되는 클래스로 XML을 역직렬화하고 관리 코드를 사용하여 해당 클래스에서 작동할 수 있습니다.

  • 비즈니스 요구에 맞게 XML 열에서 처리를 시작하는 Transact-SQL 저장 프로시저와 함수를 작성할 수 있습니다.

예: XSL 변환 적용

XML 데이터 형식 인스턴스와 파일에 저장된 XSL 변환을 수락하고, 변환을 XML 데이터에 적용한 다음, 결과에서 변환된 XML을 반환하는 CLR 함수 TransformXml() 를 고려합니다. 다음은 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-SQL 함수가 만들어지면 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)를 참조하세요.