Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何从XML列中提取具有特定数据的值?_Sql_Sql Server_Xml_Xml Parsing - Fatal编程技术网

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

Sql 如何从XML列中提取具有特定数据的值?,sql,sql-server,xml,xml-parsing,Sql,Sql Server,Xml,Xml Parsing,我有一个查询,它给出了一个错误,我不知道为什么会给出这个错误。有什么问题 SELECT top 10 [ID] ,[EVENTCLASS] ,[EVENTNAME] ,[EVENTDATA] ,[EVENTDATE] ,[BYUSER] ,[IDENTIFIER] ,[ZONE] ,[ARCHIVED] , metadata.value('(./@Value)[1]', 'nvarc

我有一个查询,它给出了一个错误,我不知道为什么会给出这个错误。有什么问题

   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'
我必须在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>


我想按EventStatus及其值进行搜索。

您正在分解
Name=EventStatus
的节点,并使用where子句,其中
value=Recognized

这些可以用这样的东西组合成一个

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

Name=EventStatus
的节点上进行分解,并在
Value=Recognized
的位置使用where子句

这些可以用这样的东西组合成一个

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

XML是区分大小写的…如果您使用XPath:
«文档/数据»
s/b
«文档/数据»
…并且
«名称='EventStatus'»
s/b
«名称='EventStatus'»
…除此之外还有一些其他错误…XML是区分大小写的…如果您使用XPath:
«文档/数据»
s/b
«文档/数据»
..以及
«@name='EventStatus'»
s/b
«@name='EventStatus'»
..除此之外,还有其他一些错误。。。