SQL Server 2012在单个XML元素中创建VARBINARY列表
问题描述:
我目前正在努力寻找解决以下问题的方法。SQL Server 2012在单个XML元素中创建VARBINARY列表
我有一个结果集VARBINARY值 - 例如:
- QAAAAAAAAAE =
- QAAAAAAAAAQ =
这些结果需要被包装到由单个空格分隔的一个XML元素(以表示一组值)。结果应该如何看实例:
<results>QAAAAAAAAAE= QAAAAAAAAAQ=</results>
我有同时使用XML PATH的是,我不能合并一个“”(VARCHAR),结果VARBINARY领域的问题。如果我在结果之前添加“',然后转换为varbinary,由于已经转换了空间,所以结果不正确。以下是我迄今为止所尝试的一个示例:
(
STUFF((SELECT DISTINCT ' ' + CONVERT(VARBINARY, id)
FROM results
FOR XML PATH('ns2:children')
),1,1,'')
),
答
请注意,尝试短SQL
命令可能帮助ü实现上述结果:
SELECT REPLACE(T.Data, '</results><results>', ' ')
FROM
(
SELECT STUFF(
(
SELECT DATA [results]
FROM <table_name> FOR XML PATH('')
), 1, 1, '<') [Data]
) T;
结果:
<results>QAAAAAAAAAE= QAAAAAAAAAQ=</results>
答
如果我理解你想要什么?获得<results>QAAAAAAAAAE= QAAAAAAAAAQ=</results>
作为结果的方法是:
select ltrim((
select ' '+cast(id as varchar(50))
from t
group by id
for xml path(''))) results
for xml path('');
+0
处理XML不,如果有可能你不应该在字符串级别处理XML ...... – Shnugo
答
你不应该在字符串级别的XML处理。这可能有各种副作用...
你可以试试这个:
我填写了一些值的表在VARBINARY
列:
DECLARE @table TABLE(SomeData VARBINARY(MAX));
INSERT INTO @table VALUES(0x12AF)
,(CAST('test' AS VARBINARY(MAX)))
,(CAST(GETDATE() AS VARBINARY(MAX)));
SELECT *
FROM @table;
结果
SomeData
0x12AF
0x74657374
0x0000A81100AD9F69
如果你把它当作XML,转换为base64就会隐式完成
SELECT * FROM @table FOR XML PATH('result')
结果
<result>
<SomeData>Eq8=</SomeData>
</result>
<result>
<SomeData>dGVzdA==</SomeData>
</result>
<result>
<SomeData>AACoEQCtn2k=</SomeData>
</result>
现在有XQuery-function data()
拯救你。它会自动串联,以空格隔开的所有子值:
SELECT(
SELECT *
FROM @table
FOR XML PATH('result'),TYPE
).query('data(/result/SomeData)') AS result
FOR XML PATH('results')
结果是
<results>
<result>Eq8= dGVzdA== AACoEQCtn2k=</result>
</results>
没有,如果有的话,你可能不应该在串级... – Shnugo