sql - FOR XML 列名称“Value/@json:ValueType”缺少 XML 名称空间前缀“json”声明
问题描述
我正在开发一个项目,我正在编写的存储过程正在生成 XML 格式的输出。我想将命名空间添加到“主”节点并将 JSON ValueType 添加到子节点。下面是我的代码:
--- Fake tables in stored procedure
create table #Cdetails(cid int, cidtype varchar(5), name varchar(5), age int)
insert into #Cdetails
values (1001, 'N', 'John', 12), (1002, 'U', 'Rick', 19),
(1003, 'N', 'Diane', 25), (1004, 'N', 'Kippy', 26)
--Output of stored procedure
create table #final(cid int, cidtype varchar(5), xml_data xml)
insert into #final
select
cid = c1.cid,
cidtype = c1.cidtype,
case
when c1.cidtype = 'N'
then (select
'Value/@json:ValueType'='Number',
ID = cd1.cid,
details = (select
cd1.name, cd1.age
for xml path(''), type)
from
#Cdetails cd1
where
cd1.cid = c1.cid
for xml path('Main'))
when c1.cidtype = 'N'
then (select
ID = cd1.cid,
details = 'Null'
from
#Cdetails cd1
where
cd1.cid = c1.cid
for xml path('Main'))
end as 'xml_data'
from
#Cdetails c1
;WITH XMLNAMESPACES ('http://www.integround.com/json' as json)
SELECT *
FROM #final
WHERE xml_data IS NOT NULL
FOR XML PATH('Main')
drop table #Cdetails, #final
在此过程中,根据 CIDType 条件生成 XML。所以我目前的输出是:
我想将命名空间添加到“主”节点并将 JSON 属性添加到子节点。
错误
FOR XML 列名称“Value/@json:ValueType”缺少 XML 名称空间前缀“json”声明。
期望的输出:
有什么帮助吗?!
解决方案
XML 构造可以帮助您吗?
DECLARE @cdetails table(
cid INT, cidtype VARCHAR(5), name VARCHAR(5), age INT
);
INSERT INTO @cdetails VALUES
(1001, 'N', 'John', 22), (1002, 'U', 'Rick', 21),
(1003, 'N', 'Diane', 25), (1004, 'N', 'Kippy', 26);
SELECT
cid, cidtype,
CAST('' AS XML).query('
<Main xmlns:json="http://www.samplenamespace.com/json">
<ID json:ValueType="Number">{sql:column("cid")}</ID>
{
if( sql:column("cidtype")="N" ) then
<details>
<name>{sql:column("name")}</name>
<age>{sql:column("age")}</age>
</details>
else <details>Null</details>
}
</Main>
')
FROM @cdetails;
推荐阅读
- simulation - 在行人库中定义行程时间
- r - 如何从 R 中的另一个数据框中展平数据框变量
- python - 如何将滚动或扩展转换应用于日期时间数据
- java - 将十六进制字符串转换为 rgba 整数(颜色)的最佳方法?
- java - javax.ejb 今天还在使用吗?
- java - 如何为 NetBeans 视觉库场景启用 java.awt.dnd 删除?
- mysql - Mysql 8 表大小
- java - 如何使用 java 在 amazon s3 中存储文件
- python - 将 one-hot 编码维度转换为位置 1 的索引
- db2 - 如何从 Datastage 中的输入字符串中删除垃圾字符