2008-12-04 75 views

回答

2

xml數據類型有自己的一套方法,您可以使用它來處理列中的數據。在這種情況下,你可能會使用這樣的:

select xmlColumnName.value('XpathExpression', 'outputSqlType') from dataTable 

例如,

select xmlColumnName.value('/root/node[@name="myname"]', 'varchar(60)') 

的方法是查詢(),()的值,存在(),修改()和節點( ),並且您可以在聯機叢書中閱讀更多關於它們的信息。

1

您可以使用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喜歡的日期時間。

相關問題