2008-09-09 4 views
3

내 회사의 "연락처"테이블에 필드가 있습니다. 이 테이블에는 XML 형식 열이 있습니다. 이 열은 특정 연락처에 대한 기타 데이터를 보유합니다. EG. contact 다음SQLServer 2005에서 XML 열 쿼리

<contact> 
<refno>123456</refno> 
<special>a piece of custom data</special> 
</contact> 

태그는 각 연락처 다를 수 있습니다, 내가 같은 테이블에있는 관계형 데이터 열 함께 이러한 조각을 를 조회해야합니다.

SELECT c.id AS ContactID,c.ContactName as ForeName, 
c.xmlvaluesn.value('(contact/Ref)[1]', 'VARCHAR(40)') as ref,  
INNER JOIN ParticipantContactMap pcm ON c.id=pcm.contactid 
AND pcm.participantid=2140 
WHERE xmlvaluesn.exist('/contact[Ref = "118985"]') = 1 

이 방법은 작품을 좋아하지만, 그것은 서버가 응답 할 수있는 시간이 걸립니다 :

내가 좋아하는 구조를 사용했다. 노드() 함수를 사용하여 XML 노드를 구문 분석하고 exists()를 사용하여 노드가 검색중인 값을 보유하고 있는지 테스트했습니다.

누구든지 XML 열을 쿼리하는 더 나은 방법을 알고 있습니까 ??

내가 XML을 BLOB 열 작업을위한 최상의 도움이 MSDN의 XML을 발견했습니다
+0

시간이 많이 걸리므로 서버가 응답하는 데 오래 걸리거나 쿼리를 작성하는 데 많은 시간이 필요합니까? – Espo

+0

나는 서버가 결과로 복귀 할 때까지 오랜 시간이 걸린다는 것을 의미합니다. – nialljsmith

답변

0

이 페이지는 좋은 성능 최적화를 가지고 ... 영감을 제공 할 수 있습니다 조언 :

http://msdn.microsoft.com/en-us/library/ms345118.aspx

이 당신이 XML 쿼리의 성능을 향상하기 위해 할 수있는 많은,하지만 그것은 좋은으로 제대로 인덱스 관계형 데이터 수 없을 것입니다. 하나의 문서를 선택한 다음 그 중 하나만 쿼리하면 꽤 잘 할 수 있지만 쿼리를 통해 유사한 문서를 스캔하여 무언가를 찾고자 할 때 관계형 쿼리 계획의 주요 조회와 같은 것입니다 (즉, 입니다.

+0

코드 재검토 중에이 기사를 읽었습니다. 나는 조언의 일부를 따랐다. 그러나 나는 DB에 할 수있는 일이 매우 제한적이다. 2005 년 약 6 개월 전에 업데이트 된 SQL Server 만있었습니다. – nialljsmith

3

하나의 쓰기 및 많은 읽기를 수행하는 경우 쓰기 시간에 구문 분석 적중을 가져 와서 해당 데이터를 더 많은 쿼리 가능 형식으로 가져옵니다. 첫 번째 제안은 name/value/contactID 열과 관련된 별도의 테이블로 파싱하는 것입니다.

0

Xml에 대한 XSD가 있으면 데이터베이스로 가져올 수 있으며 XML 데이터에 대한 색인을 작성할 수 있습니다.

0

는 conversionupdatelog FROM 변환 (XML, colName 사용)을 .value이

SELECT *보십시오 ('(/ 리드/납/@ LeadID ='[email protected] ') [1], 'varchar (max)') = 'true'

관련 문제