Sql server 如何在Sql Server中从XML中选择所有子项?

Sql server 如何在Sql Server中从XML中选择所有子项?,sql-server,xml,Sql Server,Xml,当我运行select查询时,我有下面的XML,它只考虑第一个值,我这里缺少什么 <?xml version="1.0" encoding="utf-16"?> <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> &

当我运行select查询时,我有下面的XML,它只考虑第一个值,我这里缺少什么

<?xml version="1.0" encoding="utf-16"?>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <string>1</string>
  <string>2</string>
  <string>3</string>
  .............
</ArrayOfString>
如果希望每个字符串节点有一行,则需要在节点子句中包含字符串节点:

选择AOS.s.value./text[1],“bigint”作为字符串-如果它是字符串,为什么要请求bigint? 从…起VALUES@XMLVX 交叉应用V.X.nodes'/ArrayOfString/string'AOSs;
似乎您正在寻找以下内容

最好不要使用IN子句,因为它通常会转换为低效或表达式

SQL


只考虑第一个值,因为这是您要求的:“字符串[1]”;[1]表示第一个节点。你是说你想要带分隔符的结果吗?@Larnu,不,我只想要多行。实际上,我想在where子句中使用结果。像这样,在SELECT xmlu.v1.value'string[1],@xml.nodes'/ArrayOfString'中的'BIGINT'作为xmluv1,这样使用可以吗?我是说性能方面。可以有100个字符串,我可以完全控制从代码创建XML变量并传递到存储过程。因此,请告知,这是传递XML的正确方式吗?还是需要更改XML模式?因此,我唯一的目的是将多个值传递给存储过程。这样使用可以吗?为什么不可以;100行对RDBMS来说根本算不了什么。因此,我唯一的目的是向存储过程传递多个值。如果这是您的真正目标,为什么不使用表类型参数@viveknuna呢?我建议使用表类型参数比xml更好是的,但是,这是一个完全不同的问题。如果您想了解使用TTP而不是XML的好处,您应该问一个新问题@viveknuna。
SELECT xmlu.v1.value('string[1]', 'BIGINT')
                                    FROM
           @xml.nodes('/ArrayOfString')
           AS xmlU(v1)
-- DDL and sample data population, start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY, city VARCHAR(20));
INSERT INTO @tbl (city) VALUES
('Miami'),
('Orlando'),
('Dallas'),
('New York'),
('Hollywood');

DECLARE @parameter XML =
N'<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <string>1</string>
    <string>2</string>
    <string>3</string>
</ArrayOfString>'
-- DDL and sample data population, end

;WITH rs AS
(
    SELECT c.value('.', 'INT') AS ID
    FROM @parameter.nodes('/ArrayOfString/string/text()') AS t(c)
)
SELECT * 
FROM @tbl AS t INNER JOIN 
     rs ON t.ID = rs.ID;