2011-12-13 69 views
1

我有一個表與名爲Description包含XML就像一列:如何在XML列上使用xpath來選擇行?

<Parent> 
    <Child Target="A" Id="123456"> 
     <SpecialCode Target="I" Value="2530138" /> 
    </Child> 
</Parent> 

如果我想成立一​​個名爲@value表示在該XML值屬性參數,

我怎麼能SELECT的來自MyTable的行,其中Description列的SpecialCode屬性等於@value

DECLARE @value varchar(20); 
SET @value = '44555' 
SELECT .... 
FROM MyTable 

回答

3

如何:

SELECT (list of columns) 
FROM dbo.MyTable 
WHERE [Description].exist('/Parent/Child/SpecialCode[@Value=sql:variable("@value")]') = 1 

如果你的XML列在不同的列,那麼你會使用:

SELECT (list of columns) 
FROM dbo.MyTable t1 
INNER JOIN dbo.MyTable t2 ON t1.ID = t2.ID 
WHERE t2.[Description].exist('/Parent/Child/SpecialCode[@Value=sql:variable("@value")]') = 1 

只是別名你的表,適當加入他們的行列,並在適當的表別名前面加上XML列....

+0

太棒了!謝謝!如果它是來自我加入的另一張桌子的列,該怎麼辦? – pencilCake

+0

@pencilCake:更新了我的回覆 –