在 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 /> |
+-----------+--------------+
我在 product
table
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 /> |
+-----------+--------------+