我可以在不指定XML标记的情况下查询它吗';SQL Server中的父标记?

我可以在不指定XML标记的情况下查询它吗';SQL Server中的父标记?,sql,sql-server,xml,Sql,Sql Server,Xml,我有一个表列,用于存储API服务的传出XML。我需要搜索所有记录,例如: <personId>1</personId> 有没有一种方法可以在不指定父标记的情况下查询xml值?如果“personId”在其他任何地方都没有出现,您可以使用简单的方法 where xmlValue.value('(//personId)[1]', 'int') = 1 要尝试: DECLARE @tbl TABLE(ID INT,xmlCol XML); INSERT INTO @tbl V

我有一个表列,用于存储API服务的传出XML。我需要搜索所有记录,例如:

<personId>1</personId>
有没有一种方法可以在不指定父标记的情况下查询xml值?

如果“personId”在其他任何地方都没有出现,您可以使用简单的方法

where xmlValue.value('(//personId)[1]', 'int') = 1
要尝试:

DECLARE @tbl TABLE(ID INT,xmlCol XML);
INSERT INTO @tbl VALUES
(1,'<?xml version="1.0" encoding="utf-8"?>
<order>
    <personId>1</personId>
</order>')
,(2,'<?xml version="1.0" encoding="utf-8"?>
<query>
    <personId>2</personId>
</query>');
如果您知道级别,但父名称不同,则可以使用星号

SELECT *
FROM @tbl AS tbl
WHERE xmlCol.value('(/*/personId)[1]','int')=1
DECLARE @tbl TABLE(ID INT,xmlCol XML);
INSERT INTO @tbl VALUES
(1,'<?xml version="1.0" encoding="utf-8"?>
<order>
    <personId>1</personId>
</order>')
,(2,'<?xml version="1.0" encoding="utf-8"?>
<query>
    <personId>2</personId>
</query>');
SELECT *
FROM @tbl AS tbl
WHERE xmlCol.value('(//personId)[1]','int')=2
SELECT *
FROM @tbl AS tbl
WHERE xmlCol.value('(/*/personId)[1]','int')=1