MS SQL Server 2008 R2
上的数据库有一个存储为BLOB的列(具有"图像"数据类型)。我也知道BLOB包含XML。
报告服务是否有办法提取此信息? 我如何查询或使用XML BLOB中存储的数据?
我已经阅读了将SQL IMAGE数据类型转换为XML数据类型的内容;然后使用@xml.query
来获取元素/属性值,这是个好主意吗?如何将BLOB(图像数据类型)转换为XML数据类型?
如何检查我的XML是否具有模式(因此是类型化或非类型化的XML)?
或者是否有更简单的方法在包含XML的BLOB中检索数据以使用它来生成SSRS web report
?
答案 0 :(得分:5)
是的,您可以将Image
强制转换为Xml
,然后使用XQuery等功能来解析Xml文档。但是,您首先需要通过VARBINARY
投射它。
SELECT CAST(cast(SomeXmlStoredAsBlob AS VARBINARY(MAX)) AS XML) AS MyXml
FROM MyTable
我建议尽快更改列类型 - 如果所有数据都是Xml,则按照上面的说法将其转换为Xml,如果有不同的格式,则使用VARBINARY(MAX)
答案 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)
这给了我们这些结果:
很酷,嘿?
缺点是这并不是特别快。
在我的应用中,我使用这样的代码,但写出&#34;表格版本&#34;将此数据转换为常规SQL Server表。
你真的不希望尝试根据直接加载和解析XML blob进行报告...