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

SQL Server 2008 R2: Working with XML stored as BLOB (image data type)

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

报告服务有没有办法提取这些信息? 我将如何查询或使用存储在 XML BLOB 中的数据?

我读过一些关于将 SQL IMAGE 数据类型转换为 XML 数据类型的内容;然后使用 @xml.query 得到 element/attribute 值,这是个好主意吗?如何将 BLOB(图像数据类型)转换为 XML 数据类型? 我如何检查我的 XML 是否有模式(因此有类型或无类型 XML)?

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

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

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

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

SqlFiddle here

是的,您可以使用 SQL 服务器将数据从 XML blob 提取到 table。

您需要读入您的 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)

这给了我们这些结果:

酷,嘿?

缺点是这不是特别快。

在我的应用程序中,我使用这样的代码,但将此数据的 "table version" 写入常规 SQL 服务器 table。

真的不想尝试基于直接加载和解析 XML blob 进行报告...