SQL Server 2008 R2:使用存储为BLOB的XML(图像数据类型)

时间:2015-05-27 04:34:41

标签: sql sql-server xml reporting-services blob

MS SQL Server 2008 R2上的数据库有一个存储为BLOB的列(具有"图像"数据类型)。我也知道BLOB包含XML。

报告服务是否有办法提取此信息? 我如何查询或使用XML BLOB中存储的数据?

我已经阅读了将SQL IMAGE数据类型转换为XML数据类型的内容;然后使用@xml.query来获取元素/属性值,这是个好主意吗?如何将BLOB(图像数据类型)转换为XML数据类型? 如何检查我的XML是否具有模式(因此是类型化或非类型化的XML)?

或者是否有更简单的方法在包含XML的BLOB中检索数据以使用它来生成SSRS web report

2 个答案:

答案 0 :(得分:5)

是的,您可以将Image强制转换为Xml,然后使用XQuery等功能来解析Xml文档。但是,您首先需要通过VARBINARY投射它。

SELECT CAST(cast(SomeXmlStoredAsBlob AS VARBINARY(MAX)) AS XML) AS MyXml
FROM MyTable

我建议尽快更改列类型 - 如果所有数据都是Xml,则按照上面的说法将其转换为Xml,如果有不同的格式,则使用VARBINARY(MAX)

SqlFiddle here

答案 1 :(得分:0)

是的,您可以使用SQL Server将XML blob中的数据提取到表中。

您需要读取blob值,然后将其转换为xml类型的变量,并从那里,您可以使用一些复杂的语法来查询它。

这是一个小例子:

DECLARE @str nvarchar(2000)

SET @str = ''
SET @str = @str + '<users>'
SET @str = @str + '  <user>'
SET @str = @str + '     <firstName>Mike</firstName>'
SET @str = @str + '     <lastName>Gledhill</lastName>'
SET @str = @str + '     <age>31</age>'
SET @str = @str + '  </user>'
SET @str = @str + '  <user>'
SET @str = @str + '     <firstName>Mark</firstName>'
SET @str = @str + '     <lastName>Stevens</lastName>'
SET @str = @str + '     <age>42</age>'
SET @str = @str + '  </user>'
SET @str = @str + '  <user>'
SET @str = @str + '     <firstName>Sarah</firstName>'
SET @str = @str + '     <lastName>Brown</lastName>'
SET @str = @str + '     <age>23</age>'
SET @str = @str + '  </user>'
SET @str = @str + '</users>'

DECLARE @xml xml
SELECT @xml = CAST(CAST(@str AS VARBINARY(MAX)) AS XML) 

--  Iterate through each of the "users\user" records in our XML
SELECT 
    x.Rec.query('./firstName').value('.', 'nvarchar(2000)') AS 'FirstName',
    x.Rec.query('./lastName').value('.', 'nvarchar(2000)') AS 'LastName',
    x.Rec.query('./age').value('.', 'int') AS 'Age'
FROM @xml.nodes('/users/user') as x(Rec)

这给了我们这些结果:

enter image description here

很酷,嘿?

缺点是这并不是特别快。

在我的应用中,我使用这样的代码,但写出&#34;表格版本&#34;将此数据转换为常规SQL Server表。

真的不希望尝试根据直接加载和解析XML blob进行报告...