任何人都可以对此提供见解吗?
我开发了一个使用 XML 数据类型的导入过程。在通过 import 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 查询路径元素('/records/record')有关。
感谢您提供的任何见解。
最佳答案
一个非常简单的测试用例
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)
给予
Msg 1934, Level 16, State 1, Line 8 SELECT failed because the following SET options have incorrect settings: 'QUOTED_IDENTIFIER'. Verify that SET options are correct for use with indexed views and/or indexes on computed columns and/or query notifications and/or xml data type methods.
这被记录在案 here
Executing XQuery and XML data modification statements requires that the connection option QUOTED_IDENTIFIER be ON.
虽然我还没有看到为什么这是 xQuery 的要求。
关于sql-server - SQL Server XML 数据类型和 QUOTED_IDENTIFIER,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3304018/