的SQL Server希望這是一個容易爲專家:)碎紙XML從NTEXT
我有一個包含XML(在這個崗位的底部)列 - 列是ntext
數據類型。 而不是在一列中顯示整個XML字符串,我想將它分成多列。數據庫是SQL Server 2008 R2。列數據類型不能更改(MS應用程序數據庫)
我已經嘗試了xpath查詢的多種變體,但我一直收到空值。希望這只是我引用它的方式,這是不正確的。任何幫助將不勝感激,因爲我似乎無法讓我的頭看起來像XML(而不是通過嘗試!):
XML(例如從結果中的一個記錄 - 我已經分解它,以便於閱讀):
<?xml version="1.0" encoding="utf-16"?>
<q1:ErrorInfo ErrorCode="1073744938" DetailedCode="0" DetailedSource="0" ExceptionDetails="" xmlns:q1="http://schemas.microsoft.com/2003/dls/GenericAgentStatus.xsd">
<q1:Parameter Name="datasourceid" Value="48c3db91-4ba9-46a5-820b-a2ab2c0733aa" />
<q1:Parameter Name="doesalertneedstroubleshootuiformoredetails" Value="False" />
<q1:Parameter Name="failurecount" Value="1" />
<q1:Parameter Name="customparameterformom" Value="86924" />
<q1:Parameter Name="datasourcename" Value="servername\database1" />
<q1:Parameter Name="protectedgroup" Value="ProtectionGroup1 Servers - servername.domain" />
<q1:Parameter Name="servername" Value="servername.domain" />
</q1:ErrorInfo>
SQL這我的工作(空值返回):
WITH XMLNAMESPACES('http://schemas.microsoft.com/2003/dls/GenericAgentStatus.xsd' as q1)
select cast(ErrorXml as XML).value('(/q1:ErrorInfo/q1:Parameter[6]/q1:value[0]/text())[1]','varchar(MAX)') as [servername]
from
target_table
在所有這一切,我想打出服務器名稱,保護組,數據源名稱末尾。
任何關於我哪裏出錯的指針都會被大量讚賞。
在此先感謝
一般來說,在XPath中,您可以使用'@ attributeName'來選擇XML屬性。試試這個XPath:'/ q1:ErrorInfo/q1:Parameter [6]/@ Value' – har07
除非你確實對*第六個參數的值感興趣,而不是與* protectedgroup *有關的值,你應該使用:'/Q1:ERRORINFO/Q1:參數[@名稱= 'protectedgroup']/@ Value'。 –
魔法!這兩項工作都非常成功,而且我很難判斷答案的答案。我決定使用har07的第一個答案,儘管使用Marcus的答案對其他人閱讀我的腳本會更好 - 在我的情況下,對於任何人來說,理解我想要達到的目標並不重要。感謝你們的時間和知識。 – user3346030