2013-08-29 3 views
2

У меня есть следующий код:SQL Variable в XML Node

DECLARE @x TABLE (item XML (document Galeries)) 
DECLARE @schemaname  VARCHAR(100) 
SET @schemaname = 'GaleriesSchem2' 

INSERT into @x 
SELECT ' 
<GaleriesSchem2> 
    <Image_1 OriginalName="Image">4814111.jpg</Image_1> 
    <Image_2 OriginalName="Image2">481411.jpg</Image_2> 
</GaleriesSchem2>' 

SELECT rref.value('.', 'varchar(MAX)') AS 'Value' 
FROM @x 
    CROSS APPLY 
    item.nodes('//GaleriesSchem2/node()') AS Results(rref) 

результат:

1 | 4814111.jpg

2 | 481411.jpg

Но я хочу изменить корневой элемент динамически, например:

item.nodes('//[local-name()=sql:variable("@schemaname")]/node()') AS Results(rref) 

Но этот код не работает.

ответ

0

Используйте звездочку вместо двойной слэш

DECLARE @x TABLE(item XML) 
DECLARE @schemaname VARCHAR(100) 
SET @schemaname = 'GaleriesSchem3' 

INSERT into @x 
SELECT ' 
<GaleriesSchem2> 
    <Image_1 OriginalName="Image">4814111.jpg</Image_1> 
    <Image_2 OriginalName="Image2">481411.jpg</Image_2> 
</GaleriesSchem2> 
<GaleriesSchem3> 
    <Image_1 OriginalName="Image">4814111_3.jpg</Image_1> 
    <Image_2 OriginalName="Image2">481411_3.jpg</Image_2> 
</GaleriesSchem3> 
' 
SELECT rref.value('.', 'varchar(MAX)') AS 'Value' 
FROM @x 
    CROSS APPLY  
    item.nodes('*[local-name()=sql:variable("@schemaname")]/node()') AS Results(rref) 

Посмотреть демо на SQLFiddle