2013-08-29 3 views
2

나는 다음과 같은 코드를 가지고 :SQL 변수

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