簡體   English   中英

SQL Server 2008 R2:使用存儲為BLOB的XML(圖像數據類型)

[英]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

是的,您可以將ImageXml ,然后使用XQuery等功能來解析Xml文檔。 但是,您首先需要通過VARBINARY進行轉換。

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

我建議盡快更改列類型 - 如果所有數據都是Xml,然后按照上面的說法將其轉換為Xml,如果有不同的格式,則使用VARBINARY(MAX)

SqlFiddle在這里

是的,您可以使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM