1

1列のテーブルがあります:

IF OBJECT_ID('tempdb..#tmp') IS NOT NULL DROP TABLE #tmp
CREATE TABLE #tmp
(
data XML
)GO

1 つのレコードで:

INSERT INTO #tmp
VALUES ( N'<RelevanExpertXML><Tel><RelevanExpert>1</RelevanExpert></Tel><Tel><RelevanExpert>2</RelevanExpert></Tel></RelevanExpertXML>')

と 1 つの列を持つ別の物語

CREATE TABLE #tmp2
(
id int
)
GO

そして、私はこのクエリを書きたいです:

select * 
from #temp
where xml.exist('/RelevanExpertXML/Tel/RelevanExpert[(text()) = [select id from     #temp2]]') = 1

実際、exist() でサブクエリを書きたいのですが、エラーが発生し、句と選択リストから変更できません。where 句を変更できるのは私だけです。

手伝ってくれてありがとう。

4

2 に答える 2

1

このクエリを使用できます。

select * 
from #tmp
where exists
    (
       select * 
       from #tmp2 as t
       where
           #tmp.data.exist('/RelevanExpertXML/Tel/RelevanExpert[(text()) = sql:column("t.id")]') = 1
    )

ただし、xml全体が返されます。xml を行ごとに分割する場合は、句nodes()で関数を使用する必要があります。from

于 2013-10-21T06:27:26.823 に答える
0

あなたは書ける

select * 
from #tmp, #temp2
where data.exist('/RelevanExpertXML/Tel/RelevanExpert[text()] = sql:column("id")')=1

しかし、それがあなたが求めている結果をもたらすとは思いません。

あなたはもっと似たものを求めているかもしれません

select t.r.value('.','int')
from #tmp temp
cross apply data.nodes('/RelevanExpertXML/Tel/RelevanExpert') t(r)
inner join #temp2 t2 on t.r.value('.','int') = t2.id
于 2013-10-20T18:34:49.463 に答える