2014-04-10 1 views
1

FOR XML RAW, ELEMENTS를 사용하여 SELECT 쿼리를 구조화 된 XML 문서로 반환하는 쿼리가 있습니다. 그러나 Fields [0] .Value를 사용하여 TSQLDataSet을 사용하여 결과를 얻으면 결과는 SQL Server Management Studio에서 쿼리를 실행할 때 나타나는 결과와 다릅니다. 나는 TSQLDataSet의 결과에 표시되는 내용Fields [0] .Value를 사용하여 FOR XML RAW에서 XML을 가져 오려면 ELEMENTS 쿼리가 엉망입니다.

:

내가 SSMS의 결과에 표시되는 내용
੄customerIdфname၄governmentNumberไdebtorAddress1ไdebtorAddress2ไdebtorAddress3ไdebtorAddress4ࡄpostCodeୄcontactNameՄphonë́faxൄcustomerSinceՄtermsلactiveไcurrentBalanceلDebtorခŁ䄁ഃӤ 

:

<Debtor> 
    <customerId>C0E449E5B2C  </customerId> 
    <name>New Customer 2        </name> 
    <governmentNumber>    </governmentNumber> 
    <debtorAddress1>Address Line 1         </debtorAddress1> 
    <debtorAddress4>Address Line 4     </debtorAddress4> 
    <postCode>1234    </postCode> 
    <phone>1234567890    </phone> 
    <fax>1234567890    </fax> 
    <customerSince>2013-06-10T18:16:06.213</customerSince> 
    <terms>M </terms> 
    <active>true</active> 
    <currentBalance>0.0000</currentBalance> 
</Debtor> 

이 권리를 얻기 위해 실행해야하는 특별한 방법이 있나요 결과?

답변

4

AFAIK AFAIK 이것은 DbExpress 제한입니다. 이 문제를 극복하는 방법을 알고 있지만 ADO (반환 된 데이터는 특수 매개 변수화 된 개체와 ADO 스트림 집합을 사용하여 요청해야합니다.)을 사용합니다. 그러나 XML 데이터를 서버 측의 문자열로 변환하여 select (하위 쿼리) 또는 간단한 CAST 문을 사용하여 문장을 둘러싸는 해결 방법을 사용할 수 있습니다. 그래서

SELECT Foo, Bar FROM FooTable FOR XML RAW, ELEMENTS 

당신이

SELECT (SELECT Foo, Bar FROM FooTable FOR XML RAW, ELEMENTS) 

에 다시 작성할 수 있습니다 또는

SELECT CAST((SELECT Foo, Bar FROM FooTable FOR XML RAW, ELEMENTS) AS VARCHAR(MAX)) 

(A CAST VARCHAR 또는 NVARCHAR 사용)에 다시 작성할 수 있습니다처럼

는 예를 들어 문장 인 경우 마지막으로

결과는 다음과 같습니다.

SQLDataSet1.Fields[0].AsString 
+1

약간의 테스트와 캐스트는 필요하지 않습니다. 서브 쿼리를 사용하면 충분하다. '선택 (선택 푸, XML 원시, 요소, 유형에 대한 FooTable 바)' –

+1

@MikaelEriksson, 감사합니다. 방금 제안을 추가하여 답변을 수정했습니다. – RRUZ

관련 문제