简体   繁体   English

如何从XML列中提取具有特定数据的值?

[英]How to extract values with a specific data from an XML column?

I have a query that gave an error that i dont know exactly why gave that error. 我有一个查询,给出了一个错误,我不知道为什么会给出该错误。 What is the problem? 问题是什么?

   SELECT top 10 [ID]
      ,[EVENTCLASS]
      ,[EVENTNAME]
      ,[EVENTDATA]
      ,[EVENTDATE]
      ,[BYUSER]
      ,[IDENTIFIER]
      ,[ZONE]
      ,[ARCHIVED]
      , metadata.value('(./@Value)[1]', 'nvarchar(max)') as CurrentEvent
FROM [dbo].[EventLog] with(nolock)
  cross apply eventdata.nodes ('/document/data[@name = ''EventStatus'']') as metadata
  where convert (date, eventdate) > '2019-04-15'
  and  metadata.value('(./@value)[1]', 'nvarchar(max)') = 'Recognized'

I have to search in Eventdata column that is an XML like this : 我必须在Eventdata列中进行搜索,该列是这样的XML:

<Document ID="50f1c559-7a2a-4420-8fcb-de1e3d523c1a" Action="CREATE">
  <Data Name="EventTenant" Value="soc" Type="System.String" />
  <Data Name="TargetTenant" Value="soc" Type="System.String" />
  <Data Name="UserId" Value="519" Type="System.Int32" />
  <Data Name="EventStatus" Value="Recognized" Type="System.String" />
  <Data Name="TimeStamp" Value="2019-03-15 12:22:02.095" Type="System.String" />
  <Data Name="NextEventStatus" Value="Exported" Type="System.String" />
  <Data Name="NextEventAppId" Value="003" Type="System.String" />
  <Data Name="DocumentId" Value="50f1c559-7a2a-4420-8fcb-de1e3d523c1a,003" Type="System.String" />
</Document>

I want to search by EventStatus and its value. 我想按EventStatus及其值进行搜索。

You are shredding on nodes where Name=EventStatus and you use a where clause where Value=Recognized . 您正在粉碎Name=EventStatus节点,并使用Value=Recognized的where子句。

Those can be combined into one using exist something like this. 这些可以合并成一个使用存在这样的事情。

SELECT top 10 [ID]
      ,[EVENTCLASS]
      ,[EVENTNAME]
      ,[EVENTDATA]
      ,[EVENTDATE]
      ,[BYUSER]
      ,[IDENTIFIER]
      ,[ZONE]
      ,[ARCHIVED]
FROM [dbo].[EventLog]
where convert (date, eventdate) > '2019-04-15'
  and eventdata.exist('/Document/Data[@Name = "EventStatus" and @Value = "Recognized"]') = 1

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM