從XML

0
<Quote xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <error>TLP3: The product has no marked price;</error> 
</Quote> 

我已存儲在表中的列的XML選擇文本的一部分,我使用以下查詢以提取xml元素:從XML

select 
    CONVERT(XML, CONVERT(NVARCHAR(max), Response)).value('(/Quote/error)[1]','nvarchar(max)') as Exception 

表達的結果是:

TL43:The product has no marked price.; 

我想只選擇代碼:TL43

然後seperately我會喜歡選擇:The product has no marked price.

有沒有辦法我可以做到這一點?

XML更新

+0

可能你或許能給上的XML格式的詳細信息 – clancer

回答

0

我不知道,如果你問的方式使用TSQL XML能力做到這一點,但基本的SQL功能就足夠了。

爲了清晰起見,我使用了CTE,但是如果沒有CTE,您可能會將它們混淆在一起。

我假設你可以轉換最後的';'在源頭上向'。'在你想要的輸出中,如果這實際上是一個要求。

DECLARE @Response VARCHAR(MAX) = '<Quote xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<error>TLP3: The product has no marked price;</error> 
</Quote>' 

;WITH cte AS (
    SELECT CONVERT(XML,@Response).value('(/Quote/error)[1]','nvarchar(max)') as Exception 
) 
SELECT LEFT(Exception,CHARINDEX(':',Exception)-1) Code 
     ,SUBSTRING(Exception,CHARINDEX(':',Exception)+1,LEN(Exception)) Exception 
    FROM cte 
0
select substring(CONVERT(XML,CONVERT(NVARCHAR(max),Response)).value('(/Quote/error)[1]','nvarchar(max)'),0,charindex(':', CONVERT(XML,CONVERT(NVARCHAR(max),Response)).value('(/Quote/error)[1]','nvarchar(max)'))) as Excepiton