2010-07-21 27 views
11

¿Alguien puede darnos una idea de esto?SQL Server Tipo de datos XML y QUOTED_IDENTIFIER

Desarrollé un proceso de importación utilizando un tipo de datos XML. Después de que la importación sProc inserte los datos en una tabla, ejecuto otros procedimientos para actualizar otra tabla con la tabla importada.

El procedimiento de actualización arroja una excepción si se crea con SET QUOTED_IDENTIFIER OFF. Me gustaría entender por qué está sucediendo eso.

Aquí está el código:

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 

Estoy asumiendo que tiene que ver con los tipos de datos citados ('VARCHAR (15)') o los elementos de ruta XML Query ('/ registros/Record').

Gracias por cualquier idea que pueda proporcionar.

Respuesta

16

Un caso de prueba muy simple

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) 

da

Msg 1934, nivel 16, estado 1, línea 8 SELECT fracasado debido a las siguientes opciones SET tienen una configuración incorrecta: 'QUOTED '. Verifique que las opciones SET sean correctas para el uso con vistas indexadas y/o índices en columnas calculadas y/o consultas y/o métodos de tipo de datos xml métodos.

Esto está documentado en la aprobación here

La ejecución de XQuery y datos XML instrucciones de modificación requiere que la conexión opción QUOTED estar encendido.

No he visto una razón por la cual este sea un requisito para xQuery.

+0

Muchas gracias, Martin. Msg 1934 es exactamente el mensaje que he estado recibiendo en mi escenario. Revisaré la documentación. Es reconfortante saber que este es el comportamiento esperado. Gracias de nuevo. –

Cuestiones relacionadas