簡體   English   中英

如何在SQL Server的XML列上編寫查詢

[英]How can I write a query in SQL Server on XML column

table tbl_event_log

columnName DataType
id          Int
event       XML
userinfo    XML

數據應該是

<Event><Player readName="9.Make You Talk!" demoName="Video Game" **portal="FB"** totalDuration="0:07/0:07(100%)" /></Event>

我想編寫查詢以從portal =“ FB”獲取數據

使用nodes()方法拆分行然后獲取值:檢查此解決方案,希望對您有所幫助:

Declare @mytable table (id int,event xml,userinfo varchar(200))

Insert into @mytable
select 1, '<Event><Player readName="9.Make You Talk!" demoName="Video Game" portal="FB" totalDuration="0:07/0:07(100%)" /></Event>','Test'
Union
select 2, '<Event><Player readName="9.Make You Talk!" demoName="Video Game" portal="TW" totalDuration="0:07/0:07(100%)" /></Event>','Test'



select
    s.id,
    e.p.value('@portal', 'varchar(max)') as portal
from @mytable as s
    outer apply s.event.nodes('Event/Player') as e(p)

select * from (
select
    s.id,
    e.p.value('@portal', 'varchar(max)') as portal
from @mytable as s
    outer apply s.event.nodes('Event/Player') as e(p)
) Test
where Test.portal = 'FB'

Attn:將@mytable替換為您的表名。

注意 :表中的事件列必須為XML數據類型。

要將數據放入特定字段,您可以直接從xml中提取它們。

例如:

select id, userinfo,
event.value('/Event[1]/Player[@portal="FB"][1]/@readName','varchar(max)') as readNameFB,
event.value('/Event[1]/Player[@portal="FB"][1]/@demoName','varchar(max)') as demoNameFB,
event.value('/Event[1]/Player[@portal="FB"][1]/@totalDuration','varchar(30)') as totalDurationFB
from tbl_event_log;

[@ portal =“ FB”]:僅在portal =“ FB”的位置獲得Player標簽
[1]:使用第一個

暫無
暫無

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

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