2012-08-09 3 views
2

가져 오기/내보내기 프로세스의 경우 바이너리 데이터를 Base64 인코딩 문자열로 XML에 저장합니다. 값을 되 찾을 때 문제가 발생했습니다 ...OPENXML, 이진수로 Base64 변환

2005/2008의 성능이 무시 무시한 nodes()이므로 OPENXML을 사용하고 있습니다. 전혀 확장되지 않습니다. SQL Server 2012에서는 성능 문제가 해결되었지만 레거시 지원 (2005+)을 위해서는 현실적인 옵션이 아니므로 MS는 상황을 백 포트하려는 것처럼 보이지 않습니다 (가능한 경우 가정).

여기에 일부가 relevant info on the subject입니다.

이상적으로는 OPENXML을 사용하여 Base64로 인코딩 된 바이너리 데이터가 포함 된 XML 문서를 파쇄하고 데이터가 바이너리 데이터로 올바르게 렌더링되는 결과 세트를 제공하는 단일 SQL 문을 찾고 있습니다. 노드를 사용하지 않는 솔루션이 있는데 누군가가 더 나은 것을 원한다.

답변

4

열을 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 

또는이 같은 (즉 당신을위한 옵션 인 경우) 당신은 CLR의 사용을 만들 수 :

using System; 
using System.Text; 
    public class CLRTest 
    { 
     public static byte[] ConvertBase64ToBinary(string str) 
     { 
      if (str == null) 
      { 
       return null; 
      } 
      return Convert.FromBase64String(str); 
     } 
    } 
+0

들으 - 내'CAST (N '')보다 더 나은. 값이 ('XS : base64Binary (sql : column ('Col'), 'VARBINARY (MAX)')' –