sql-server - 从查询错误中插入 XML 字段 - QUOTED_IDENTIFIER ON 无法修复
问题描述
我需要使用来自另一个表的查询将许多行插入到一个表中。我遇到的这个问题是我要插入的列之一是 XML(我需要在其中嵌入查询中的值)但是当我尝试在 SSMS 中运行插入语句时,我得到
消息 1934 INSERT 失败,因为以下 SET 选项的设置不正确:'QUOTED_IDENTIFIER'。
我尝试将 QUOTED_IDENTIFIER 设置为 ON,但仍然遇到相同的错误。我在批处理和单独的批处理中尝试了它(SET 语句后跟 GO,在 Insert 语句之前。
我在此表中没有索引视图、过滤索引或计算列。查看表属性,我看到引用标识符为真。
这是我想要做的事情的本质。列 Area、Action 和 EntityType 是 int,Data 是 XML,Title 是 nvarchar(20)。
INSERT INTO AuditLog ( [Area], [Action], [EntityType], [Data] )
SELECT (1,2,1,'<Name>' + [Title] + '<\Name>')
FROM [Records] WHERE [TypeId] = 3;
我能够创建一个 XML 变量并使用它,但我需要能够插入多条记录,并且真的不想求助于游标来做一些看起来如此简单的事情。即使我使用简单的静态引用 XML 或使用 CAST 或 CONVERT,我也会遇到同样的错误。
我正在使用最新的 SSMS (2019) 在 SQL Server Standard 2016 上运行。我们非常感谢所有建议。
解决方案
请尝试以下概念示例。
XML
数据类型不能被视为VARCHAR/NVARCHAR
数据类型。
所需的 XML 可以通过以下方式轻松组合SELECT ... FOR XML ...
SQL
-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, Area INT, Title XML);
INSERT INTO @tbl (Area, Title) VALUES
(770, N'<root>Manager</root>');
DECLARE @target TABLE (ID INT IDENTITY PRIMARY KEY, Area INT, [DATA] XML);
-- DDL and sample data population, end
INSERT INTO @target (Area, [DATA])
SELECT Area
, (
SELECT title AS [Name]
FOR XML PATH(''), TYPE
) AS [DATA]
FROM @tbl;
-- test
SELECT * FROM @target;
输出
+----+------+-----------------------------------+
| ID | Area | DATA |
+----+------+-----------------------------------+
| 1 | 770 | <Name><root>Manager</root></Name> |
+----+------+-----------------------------------+
推荐阅读
- python - 如何在tensorflow中保存文本分类模型?
- templates - 如何访问 Microweber 上页面的 html?
- cassandra - Lagom 嵌入式 Cassandra
- php - isset 中的非法偏移类型或 php 中的空警告
- c - fscanf()。在 C 中读取带有模式的文件
- rundeck - Rundeck部署
- python-3.x - 如何在熊猫的数据框中转置值的子集?
- laravel - Unable to locate an uploaded file
- android - Android - Wifi Direct / p2p not able to find peers on Android 8
- c# - 脚本手动运行,但不通过 c#