2010-07-21 34 views
11

Có ai có thể cung cấp thông tin chi tiết về điều này không?Loại dữ liệu XML của Máy chủ SQL và QUOTED_IDENTIFIER

Tôi đã phát triển quy trình nhập bằng cách sử dụng loại dữ liệu XML. Sau khi dữ liệu được chèn vào một bảng bằng cách nhập khẩu sProc, tôi chạy một thủ tục khác để cập nhật một bảng khác với bảng đã nhập.

Quy trình cập nhật sẽ ném ngoại lệ nếu được tạo bằng SET QUOTED_IDENTIFIER OFF. Tôi muốn hiểu tại sao điều đó lại xảy ra.

Dưới đây là các mã:

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 

Tôi giả định nó đã làm với các kiểu dữ liệu trích dẫn ('VARCHAR (15)') hoặc các yếu tố con đường truy vấn xml ('/ hồ sơ/kỷ lục').

Cảm ơn bạn đã có bất kỳ thông tin chi tiết nào bạn có thể cung cấp.

Trả lời

16

Một rất đơn giản trường hợp thử nghiệm

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) 

Cho

Msg 1934, Level 16, State 1, Line 8 CHỌN thất bại vì các tùy chọn SET sau có cài đặt sai: 'QUOTED_IDENTIFIER '. Xác minh rằng tùy chọn SET là chính xác để sử dụng với chế độ xem và/hoặc chỉ mục được lập chỉ mục trên cột được tính và/hoặc truy vấn thông báo và/hoặc xml kiểu dữ liệu phương pháp.

này được ghi lại trong truyền here

Thi XQuery và dữ liệu XML báo cáo sửa đổi yêu cầu các tùy chọn kết nối QUOTED_IDENTIFIER được ON.

Tôi chưa thấy lý do tại sao đây là yêu cầu đối với xQuery.

+0

Cảm ơn rất nhiều, Martin. Msg 1934 chính xác là thông điệp tôi đã nhận được trong kịch bản của tôi. Tôi sẽ xem lại tài liệu. Đó là yên tâm để biết rằng đây thực sự là hành vi mong đợi. Cảm ơn một lần nữa. –

Các vấn đề liên quan