[英]Stored procedure parameters with literals not working in SQL Server 2008 R2
[英]SQL Server 2008 R2: Working with XML stored as BLOB (image data type)
MS SQL Server 2008 R2
上的数据库有一个存储为BLOB的列(具有“图像”数据类型)。 我也知道BLOB包含XML。
报告服务有没有办法提取这些信息? 我如何查询或使用XML BLOB中存储的数据?
我已经阅读了将SQL IMAGE数据类型转换为XML数据类型的内容; 然后使用@xml.query
获取元素/属性值,这是个好主意吗? 如何将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)
是的,您可以使用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)
这给了我们这些结果:
很酷,嘿?
缺点是这不是特别快。
在我的应用程序中,我使用这样的代码,但将此数据的“表格版本”写入常规SQL Server表。
您真的不想尝试基于直接加载和解析XML blob来进行报告...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.