sql-server - SQL Server XML 数据类型和 QUOTED_IDENTIFIER

标签 sql-server xml quoted-identifier

任何人都可以对此提供见解吗?

我开发了一个使用 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/

相关文章:

python - pymssql连接不返回数据,只打印列名?

sql-server - Ubuntu SQL Server 错误 : The evaluation period has expired

sql-server - T-sql 在字段更改时重置行号

sql - 按状态获取每个位置的数量

java - 如何在 SAML 响应中使用 X509 证书作为公钥

php - 如何在数据库中插入带有双引号的值?

postgresql - Postgres 的列名或表名什么时候需要引号,什么时候不需要?

xml - pretty-print 的 XML(具有属性对齐)

java - 使用 XMLGregorianCalendar 获取错误的日期

sql - "syntax error at or near ' 命令 '""在 PostgreSQL