Sql server SQL Server-在XML文档中查询ID列表
从本文档中将ID列表提取为ints的正确方法是什么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'
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()]都指向同一位置。谢谢。真棒的回答。