簡體   English   中英

嘗試從SQL Server獲取XML字段

[英]Trying to get XML field from SQL Server

我從其中一列為XML格式的表中獲取數據。 該列稱為“已更新”,表為“審核”。 字段如下所示:

    <Fields><Field Name="DateFrom"/><Field Name = "Type 1"/><Field Name = "Type 2/></Fields>

    <Fields><Field Name = "DateFrom"/></Fields>

    <Fields><Field Name="DateFrom"/><Field Name = "Note"/><Field Name = "Type 1"/></Fields>

XML字段是更大查詢的一部分:

    Select id, Updated
    from Audit

最后將類似於以下內容,ID為非XML列。

ID     Updated

123    DateFrom, Type1, Type2
323    DateFrom
455    DateFrom, Note, Type1

我已經嘗試了一些在網上找到的東西,但是沒有正確執行。 我嘗試的一種方法是:

    Select Updated.value('/Fields/Field Name)[1]', 'nvarchar(max)') as NewUpdated from Audit.

有任何想法嗎?

您可以使用valuenodes和類似的stuff

   DECLARE @Audit AS TABLE
(
   Id int,
   Updated xml
)

INSERT INTO @Audit
(
   Id,
   Updated
)
VALUES
(1,N'<Fields><Field Name="DateFrom"/><Field Name = "Type 1"/><Field Name = "Type 2" /></Fields>'),
(2,N'<Fields><Field Name = "DateFrom"/></Fields>'),
(3, N'<Fields><Field Name="DateFrom"/><Field Name = "Note"/><Field Name = "Type 1"/></Fields>')    

  SELECT a.Id, ca.NewUpdated
 FROM @Audit a
   CROSS APPLY
   (
     SELECT  STUFF(
                   (SELECT ', ' + x.n.value('(./@Name)[1]', 'varchar(20)') 
                   FROM a.Updated.nodes('/Fields/Field') x(n)
                   FOR XML PATH('') 
                ),1,2,'')   AS NewUpdated  
   ) ca

演示鏈接: http : //rextester.com/NNF94534

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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