我在包含定義爲xml數據類型的列的SQL 2005數據庫中有一個表。我試圖編寫存儲過程查詢xml並從select語句返回結果集。我見過返回標量值或xml的示例,但不知道如何返回結果集。將SQL 2005中的XML數據類型轉換爲關係結果集
我將不得不使用openxml還是有另一種解決方案?
我在包含定義爲xml數據類型的列的SQL 2005數據庫中有一個表。我試圖編寫存儲過程查詢xml並從select語句返回結果集。我見過返回標量值或xml的示例,但不知道如何返回結果集。將SQL 2005中的XML數據類型轉換爲關係結果集
我將不得不使用openxml還是有另一種解決方案?
xml數據類型有自己的一套方法,您可以使用它來處理列中的數據。在這種情況下,你可能會使用這樣的:
select xmlColumnName.value('XpathExpression', 'outputSqlType') from dataTable
例如,
select xmlColumnName.value('/root/node[@name="myname"]', 'varchar(60)')
的方法是查詢(),()的值,存在(),修改()和節點( ),並且您可以在聯機叢書中閱讀更多關於它們的信息。
您可以使用xml數據類型或OPENXML。另一張海報給出了一個xml數據類型的例子,所以這裏是一個OPENXML例子。
它確實依賴於XML模式。 SQL Server可能不太喜歡你的模式。如果你對模式有任何控制,那麼它有幫助。您可能最終不得不使用表變量並通過多次調用OPENXML來查詢所有內容來構建數據。
例如,XML輸入可以被如下處理:
DECLARE @idoc int
DECLARE @doc nvarchar(max)
SET @doc = '
<xml>
<Entry Type="Error" Start="2008-11-19 02:16:00" End="2008-11-20 04:55:00" />
<Entry Type="Success" Start="2008-11-25 12:45:00" End="2008-11-25 13:01:00" />
</xml>'
EXEC sp_xml_preparedocument @idoc OUTPUT, @xml
SELECT [EventType]
,[EventStart]
,[EventEnd]
FROM OPENXML (@idoc, '//Event',1)
WITH ([Type] varchar(30)
,[Start] varchar(30)
,[End] varchar(30)
)
一個我所面臨的挑戰是解析XML日期(ISO8601用「T」和可能的時區)。我最終創建了一個帶有一行代碼的.NET程序集,將它轉換爲SQL喜歡的日期時間。