실제로 나는 SQLServer 2005 XML이 문서화되어 있다고 생각합니다.
CONTENT가 기본값이며 모든 유효한 XML을 허용합니다. DOCUMENT는보다 구체적이며 저장할 수있는 XML 데이터에 단일 최상위 노드 만있을 수 있음을 의미합니다.
만들기 :
CREATE TABLE XmlCatalog (
ID INT PRIMARY KEY,
Document XML(CONTENT myCollection))
삽입 :
INSERT INTO XmlCatalog VALUES (2,
'<doc id="123">
<sections>
<section num="1"><title>XML Schema</title></section>
<section num="3"><title>Benefits</title></section>
<section num="4"><title>Features</title></section>
</sections>
</doc>')
선택 :
SELECT xCol.query('/doc[@id = 123]//section')
FROM XmlCatalog
WHERE xCol.exist ('/doc[@id = 123]') = 1
... 등등. 쿼리 언어는 xpath 1.0의 하위 집합에서 더 많거나 적습니다.
XSD를 수정하면 삽입 및 업데이트에서 확인되고 각 요소의 xml 내에 저장됩니다. 늘어나는만큼 내가 문서를 이해하는 한 항목에 다른 스키마를 참조 할 수 있도록 하나의 열에 대한 여러 스키마를 추가 할 수 있습니다.
편집 :
문서의 특정 부분을 읽은 후에 내가 당신의 문제를 이해하고 있다고 생각합니다. 그 점에 대한 참조는 분명하지 않지만 한 가지 최상위 노드가있는 항목 만 XSD 스키마에 바인딩 될 수 있다는 것을 이해합니다.
XSD 스키마에 사용 된 XSD 파일을 정의하는 단일 최상위 노드가 필요하기 때문에 둘 이상의 최상위 요소가 포함 된 조각을 유효화 할 수 없습니다. 나는 시도하지 않았지만 할 수 없다고 생각합니다.
그러나 CONTENT 열을 정의하고, XSD를 수정하고 둘 다 저장하며, XSD를 참조하는 최상위 레벨 노드가있는 XML은 물론 잘 형성되었는지 검사 할 XML 조각도 유효합니다. 조각은 위의 select 문에 표시된 XPath 쿼리 언어를 사용하여 액세스 할 수 있습니다.
성능에 미치는 영향에 대해 많이 설명 할 수는 없습니다. 이 레퍼런스에서는 XSD가 인라인으로 저장되므로 db 내에 약간의 공간이 필요하다고 언급합니다. XPath 쿼리도 실행해야합니다. 사실 xpath는 일반적으로 꽤 빠릅니다. 결과를 얻으려면 각 행마다 수행해야하는 performace 원인을 줄일 수 있다고 생각합니다.내가 xpath 표현뿐만 아니라 저장된 xml의 크기와 복잡성에 따라 특정 쿼리에 대한 실행 계획을 확인해야한다고 생각한다.
고마워 ... 마침내 누군가가 대답했다 :) ... 내 질문은 매우 특정 XML 데이터를 조각에 저장되는 특정 있습니다. SQL Server에서 이러한 조각을 분할하는 방법과 이러한 조각에 독립적으로 액세스 할 수 있는지 여부를 알고 싶습니다. 또한 XML 데이터를 이러한 방식으로 조각화하는 것이 성능에 미치는 영향은 무엇입니까? 링크를 가져 주셔서 감사합니다 ... 나는 그것을 일찍 보지 못했습니다. – Kabeer