大家好,请问在查询一个上万行的xml表中,表dbo.xmark有两列,其中第一列NAME,类型为nvarchar(20),第二列是value,类型为xml。
是先把每一行的xml文件读出来放在一个临时变量@x中,然后对@x执行query呢,还是对整个value列执行某种操作就能行?
DECLARE @x xml
DECLARE @y int =0
while @y<1
BEGIN
select @x = value from xmark1_0_4
where name = 't''+right(cast(1000000+@y as nvarchar),5)+'''
SELECT @x.query('/site/people/person[@id=''person0'']')
set @y = @y +1
END
GO
xml文件
<site>
<people>
<person id="person0">
<name>tom</name>
</person>
</people>
</site>
还有就是其实我想查的是id="person0"的那个人的姓名,就是name里面的内容。
想要达到的结果就是在所有的这些xml文件中,如果确有满足这一条件的,打印出结果;如果不满足这个条件,则不显示。但是现在就是结果有很多行,而且内容基本都是空的。。
据我所知,所有这些存储的xml文件中只有1条记录能满足这个条件,也就是说结果只有一条记录。
不知道我问题描述的够不够清楚,还请大神帮忙看看啊
------解决方案--------------------
DROP TABLE #xmark
go
CREATE TABLE #xmark(NAME NVARCHAR(20), [value] XML)
INSERT #xmark ( NAME, value )
SELECT 'test', N'
<site>
<people>
<person id="person0">
<name>tom</name>
</person>
</people>
</site>
' UNION ALL
SELECT 'noboday', N'
<site>
<people>
<person id="person1">
<name>tom</name>
</person>
</people>
</site>
'
--sql:
SELECT name FROM #xmark
WHERE [value].exist('/site/people/person[@id="person0"]') = 1
/*
name
test
*/