![](/img/trans.png)
[英]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.