Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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 server SQL Server-在XML文档中查询ID列表_Sql Server_Xpath_Sql Server 2012_Sqlxml - Fatal编程技术网

Sql server SQL Server-在XML文档中查询ID列表

Sql server SQL Server-在XML文档中查询ID列表,sql-server,xpath,sql-server-2012,sqlxml,Sql Server,Xpath,Sql Server 2012,Sqlxml,从本文档中将ID列表提取为ints的正确方法是什么 declare @d xml set @d = '<doc><id>1</id><id>2</id></doc>' select Data.Col.value('/text()', 'Int') from @d.nodes('/doc/id') as Data(Col) declare@d xml 设置@d='12'

从本文档中将ID列表提取为ints的正确方法是什么

    declare @d xml
    set @d = '<doc><id>1</id><id>2</id></doc>'

    select Data.Col.value('/text()', 'Int')
      from @d.nodes('/doc/id')
        as Data(Col)
declare@d xml
设置@d='12'
选择Data.Col.value(“/text()”,“Int”)
来自@d.nodes(“/doc/id”)
as数据(Col)
使用上面的方法,我得到一个错误 XQuery[value()]:“value()”需要一个单例(或空序列),找到的操作数类型为“xdt:untypedAtomic*”

。value()始终需要一个位置引用来标识所需的节点

declare @d xml
set @d = '<doc><id>1</id><id>2</id></doc>'

select Data.Col.value('.[1]', 'Int')
  from @d.nodes('/doc/id')
    as Data(Col)
declare@d xml
设置@d='12'
选择Data.Col.value(“[1]”和“Int”)
来自@d.nodes(“/doc/id”)
as数据(Col)

在您发表文章之后,我尝试了同样的方法,只做了一个小小的更改,即select Data.Col.value(“.[text()]”,“'Int'),它也可以工作。哪个更正确?我要的是节点的文本值,而不是节点的第一个子节点,对吗?谢恩斯指出,两者都很有效;但是,我认为在谓词中包含text()语句是在进行存在性检查,并返回第一个节点的值,而硬编码的1提供了一个特定的引用点。在本例中,nodes()方法已经将XML拆分为每行只有一个节点,因此[1]和[text()]都指向同一位置。谢谢。真棒的回答。