sql-server - 如何从 XML 中提取数据:错误应为字符串文字
问题描述
下面是我的代码。在下面运行代码时出现错误
消息 9413,级别 16,状态 1,第 2
行 XML 解析:第 1 行,字符 33,应为字符串文字
if object_id('tempdb..##DataSource') is not null
begin
drop table ##DataSource
end
CREATE TABLE ##DataSource
(
ParameterValue bigint,
Source nvarchar(100)
)
DECLARE @XMLStringDataSource XML = '<ROOT><data><row ParameterValue=\"12345678\" Source=\"Intake\"/><row ParameterValue=\"44444444\" Source=\"Intake\"/> </data></ROOT>'
INSERT INTO ##DataSource (ParameterValue,Source)
SELECT
ParameterValue = XTBl.XCol.value('@ParameterValue','bigint') ,
Source = XTBl.XCol.value('@Source','nvarchar(100)')
FROM @XMLStringDataSource.nodes('ROOT/data/row') XTbl(XCol)
解决方案
\"
由于XML 文档中的转义双引号 ( ) 引发了错误。只需删除反斜杠\
,脚本就可以工作了。
if object_id('tempdb..##DataSource') is not null
begin
drop table ##DataSource
end
CREATE TABLE ##DataSource
(
ParameterValue bigint,
Source nvarchar(100)
)
DECLARE @XMLStringDataSource XML = '<ROOT><data><row ParameterValue="12345678" Source="Intake"/><row ParameterValue="44444444" Source="Intake"/> </data></ROOT>'
INSERT INTO ##DataSource (ParameterValue,Source)
SELECT
ParameterValue = XTBl.XCol.value('@ParameterValue','bigint') ,
Source = XTBl.XCol.value('@Source','nvarchar(100)')
FROM @XMLStringDataSource.nodes('ROOT/data/row') XTbl(XCol)
如果要在参数值中使用双引号,则必须使用"
. 另请查看Escape double quote character in XML以获取有关在 XML 中转义特殊字符的更多信息。
推荐阅读
- html - 无法使用 CSS 网格/网格模板区域布局页面
- elasticsearch - 如何从elasticsearch中的结果集中搜索结果集
- python - 在 Python 中填充列表的一部分/等效于 std::fill
- java - 两个 64 位数字相乘_Gettin Input Mismatch Exception
- android - 无法初始化类 org.codehaus.groovy.reflection.ReflectionCache #Ubuntu #flutter #androidStudio
- c# - 如何使用 pInvoke 在 Windows 中检测物理设备是在线还是离线
- docker - 运行(docker_image)模块ansible Playbook时出错
- django - 未找到带有参数“(”,)”的“update_laptop”的反向操作。尝试了 1 种模式:['update_laptop/(?P
[^/]+)/$'] - java - Android CardView 实现
- sql - 执行错误:[Vertica][VJDBC](4856) 错误:“.”处或附近的语法错误