2011-10-20 2 views
0

이 테이블의 열 중 하나는 "ProgramInformation"라는 하나의 테이블 tblAdmissions 있어요. 이 열은 내가 십자가 적용하고 매우 느린 사용하여이 컬럼의 값을 얻기 위해이 쿼리를 사용하고 SQL 쿼리 nvarchar 열에서 XML 노드 값을 얻으려면 매우 느립니다.

<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" num="1"> 

    <COURSE>reference_project</COURSE> 

    <FEE>true</FEE> 

</row> 

<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" num="2"> 
    <COURSE>RoomID</COURSE> 
    <FEE>99</FEE> 

</row> 


같은 XML 문자열이 포함되어 있습니다. 내 쿼리를 빠르게 실행할 수 있도록

vDynamic AS와

( 선택

  xmlProgramInformation = CAST(ProgramInformation AS XML) 
     FROM 
      tblAdmission 

     ) 

SELECT 

    t.p.query('COURSE').value('.', 'varchar(max)') AS Decipline, 
    t.p.query('FEE').value('.', 'varchar(max)') AS CourseFee 

FROM 
    vDynamic 
    CROSS apply xmlProgramInformation.nodes('/DOCUMENT/ROWS/row') AS t(p) 

다른 방법이있다.

감사

+0

어느 누구보다 좋은 해결책이 있습니다. – user999896

답변

0

당신이 시도 할 수있는 몇 가지, 구현이 가장 쉬운 것부터 시작하여 가장 어려운 것으로 시작합니다.

  1. 모든 데이터가 XML 인 경우 nvarchar를 XML 열로 변경하십시오. 나는 이것이 당신의 성과에 눈에 띄는 영향을 미치지는 않을 것이라는 점을 상대적으로 확신하지만, 다음 단계의 기초가됩니다.

  2. XML 색인을 구현하십시오. 자세한 내용은 Books OnLine을 확인하십시오.

  3. 쿼리하는 특성이 고정되어 있으면 고정 테이블 형식으로 갈아서 잘게자를 수 있습니다. SQL Server는 SQL을 선호합니다. XML과 XQuery는 임시 탐사 및/또는 변형 작업에 사용해야합니다.

+0

안녕하세요, 귀하의 회신에 대한 Thnaks. 내 데이터는 XML을 기반으로하지 않습니다. 나는 많은 관계를 가지고 있고, 하나의 행에있는 세부 테이블에서 데이터를 얻고 싶습니다. XML을 사용하는 이유입니다. 원래 테이블에 XML 열이 없습니다. 위에서 볼 수 있듯이 코스 및 수수료 열은 nvarchar 데이터 형식을 사용하는 세부 정보 테이블에 있습니다. 나는 부모 테이블 (1 대 다수)에 기반한 xml formate의 세부 테이블에서 모든 속성을 가져온 뷰를 작성했습니다. – user999896