아래 코드를 사용하여 XML을 SQL 테이블로 병합하려고합니다. 입력 데이터 테이블 (@incomingTable)에는 10k의 형식화되지 않은 XML이 포함되어 있으며 쿼리는 출력을 반환하기 위해 7 초가 걸립니다. 실행 계획을 확인했을 때 대부분의 시간은 "Table Vaued Functions (XPATH 필터가있는 XML Reader)"단계에 소비되었습니다. 내 생각 엔이 단계는 쿼리의 Value 메서드를 참조합니다.성능 문제 노드의 값 방법 및 교차 적용을 사용하여 SQL에서 XML을 병합
value() 메서드는 Transact-SQL CONVERT 연산자를 암시 적으로 사용하고 XQuery 식의 결과를 Transact-SQL 변환에서 지정한 해당 SQL 형식으로 변환하려고 시도합니다.
질문 : 데이터 유형 변환없이 요소/속성 값을 검색하는 다른 XML 방법이 있습니까? 어쨌든 데이터를 문자열로 원하기 때문입니다. 두 가지 접근 방식의 결과를 비교하는 데 도움이됩니다.
이 쿼리를 최적화하는 다른 방법이 있습니까?
select
sqlXml.value('@ID', 'varchar(50)') as XMLFieldName,
sqlXml.value('@TS', 'varchar(50)') as XMLTSValue,
sqlXml.value('.','varchar(800)') as XMLFieldValue
from @incomingTable
cross apply playfieldvalues.nodes('/PlayAttributes/PlayFields/PlayField') as
XMLData(sqlXml)
당신이'OPENXML'을 시도 했습니까? https://msdn.microsoft.com/en-us/library/ms186918(v=sql.110).aspx?f=255&MSPPError=-2147217396 – gofr1
OPENXML은 행의 데이터를 원하는 열에 출력을 반환합니다. 그게 가능하니? – user1745679
음 ... 귀하의 쿼리를 볼 - 그것은 3 열을 반환합니다. 제발, 정교하게. OPENXML도 똑같은 일을 할 수 있습니다. 거대한 XML을 가지고 있다면'nodes'보다 더 빨리 작동 할 것입니다. – gofr1