OMG*_*ies 2 sql t-sql sql-server sql-server-2005
对于导入/导出过程,我们将二进制数据作为 Base64 编码字符串放入 XML。取回值时出现了问题......
我们使用 OPENXML 是因为使用nodes()在 2005/2008 上的性能很糟糕——它根本不能很好地扩展。他们修复了 SQL Server 2012 中的性能问题,但为了旧版支持(2005+),这不是一个现实的选择,而且 MS 似乎不想向后移植东西(假设甚至可能)。
理想情况下,我正在寻找使用 OPENXML 的单个 SQL 语句来粉碎包含编码为 Base64 的二进制数据的 XML 文档,并在那里提供一个结果集,数据正确呈现为二进制数据。我有一个不使用节点的解决方案,希望有人有更好的解决方案。
您可以将列指定为 XML 并用于.value
将数据作为varbinary
.
像这样的东西。
declare @XML xml
set @XML =
'<root>
<item>
<ID>1</ID>
<Col>Um93MQ==</Col>
</item>
<item>
<ID>2</ID>
<Col>Um93Mg==</Col>
</item>
</root>'
declare @idoc int
exec sp_xml_preparedocument @idoc out, @xml
select T.ID,
T.Col.value('.', 'varbinary(max)')
from openxml(@idoc, '/root/item', 2)
with (ID int,
Col xml) as T
exec sp_xml_removedocument @idoc
Run Code Online (Sandbox Code Playgroud)
或者您可以使用 CLR(如果这是您的选择),如下所示:
using System;
using System.Text;
public class CLRTest
{
public static byte[] ConvertBase64ToBinary(string str)
{
if (str == null)
{
return null;
}
return Convert.FromBase64String(str);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1721 次 |
最近记录: |