在 SQL 服务器中筛选 XML 列

Filter an XML column in SQL Server

我在 product table

中有一个 xml 类型的列 productsXML
Create Table Product
(
    ProductId Int,
    productsXML XML
)
Insert Into Product 
Values (1, '<products><productInfo><Item>Car</Item></productInfo></products>'),
       (2, '<products><productInfo><Item>Train</Item></productInfo></products>'),
       (3, '<products></products>')
ProductId productsXML
----------------------------------------------------------------------------
1         <products><productInfo><Item>Car</Item></productInfo></products>
2         <products><productInfo><Item>Train</Item></productInfo></products>
3         <products></products>

我想找到包含 <products></products>.

的所有行

我试过这个:

Select *
From products
Where productsxml.exist('/products') = 1

这将返回所有具有产品标签的行,这是可以理解的。

有没有办法只过滤那些具有 <products></products> 的行?

请尝试以下解决方案。

正在检查根 products 元素是否没有子元素。

SQL

DECLARE @tbl TABLE (ProductId int primary key, productsXML XML);
INSERT INTO @tbl (ProductId, productsXML) VALUES
(1,'<products><productInfo><Item>Car</Item></productInfo></products>'),
(2,'<products><productInfo><Item>Train</Item></productInfo></products>'),
(3,'<products></products>');

SELECT * 
FROM @tbl
Where productsxml.exist('/products[not(*)]')=1

输出

+-----------+--------------+
| ProductId | productsXML  |
+-----------+--------------+
|         3 | <products /> |
+-----------+--------------+