2010-07-21 10 views
11

누구든지 이에 대한 통찰력을 제공 할 수 있습니까?SQL Server XML 데이터 형식 및 QUOTED_IDENTIFIER

XML 데이터 형식을 사용하여 가져 오기 프로세스를 개발했습니다. 가져 오기 sProc에 의해 테이블에 데이터가 삽입 된 후에 가져온 테이블을 사용하여 다른 테이블을 업데이트하는 다른 프로 시저를 실행합니다.

SET QUOTED_IDENTIFIER OFF를 사용하여 업데이트 절차를 생성하면 예외가 발생합니다. 왜 그런 일이 일어 났는지 이해하고 싶습니다.

DECLARE @xmlRecords XML 
SET  @xmlRecords = (SELECT importedXML FROM importTable WHERE importId = @lastImportId) 

UPDATE o 
SET  o.ReferralCode = import.refCode 
FROM (
      SELECT records.record.value('(@orderId)[1]', 'INT') AS orderId, 
        records.record.value('(@refCode)[1]', 'VARCHAR(15)') AS refCode 
      FROM @xmlRecords.nodes('/records/record') records(record) 
      ) import 
      INNER JOIN tblOrder o ON import.OrderId = o.orderId 

나는 그것이 인용 된 데이터 유형 ('VARCHAR (15)') 또는 XML 쿼리 경로 요소 ('/ 기록/기록')과 관련이있다 있으리라 믿고있어 :

여기에 코드입니다.

당신이 제공 할 수있는 통찰력을 주셔서 감사합니다.

답변

16

아주 간단한 테스트 케이스

set quoted_identifier off 


DECLARE @xmlRecords XML 
SET  @xmlRecords = '<records><record orderId="1" refCode="1234"></record></records>' 


SELECT records.record.value('(@orderId)[1]', 'INT') AS orderId 
FROM @xmlRecords.nodes('/records/record') records(record) 

는 SELECT 다음 SET 옵션이 잘못 설정 때문에 실패 메시지 1934, 수준 16, 상태 1, 줄 8

을 제공합니다 : ' QUOTED_IDENTIFIER '. SET 옵션이 인덱싱 된보기 및/또는 계산 열 및/또는 알림 및/또는 xml 데이터 형식 메서드의 쿼리에서 사용하기에 올바른지 확인하십시오.

는 수정 문을 XQuery를 실행하고 XML 데이터 here

전달에 설명되어 있습니다 가 연결 옵션 QUOTED_IDENTIFIER가 ON 있어야합니다.

이것이 xQuery의 요구 사항 인 이유를 알지 못합니다.

+0

대단히 감사합니다. 1934 년 메시지는 내 시나리오에서 얻은 메시지입니다. 설명서를 검토하겠습니다. 이것이 실제로 기대되는 행동임을 안심할 수 있습니다. 다시 한번 감사드립니다. –