日期:2014-05-17  浏览次数:20692 次

xml查询之动态属性名称问题
SQL code

DECLARE @s XML,@Price DECIMAL(18,2),@i INT,@xmlPath VARCHAR(200)
SET @i=2 --实际应用中,通过参数传递进来的

SET @s = '<row ProductID="1" Price1="111.00" Price2="222.00" Price3="333.00" Price4="444.00" Price5="555.00" Price6="666.00" Price7="777.00"/>'

SET xmlPath = '/row[1]/@Price' + CONVERT(VARCHAR(10),@i)--这里是要动态读取某个字段的

SET @Price = @s.value(@xmlPath,'DECIMAL(18,2)')--这样传进来不行,应该怎么写?



------解决方案--------------------
SQL code
DECLARE @s XML,@Price DECIMAL(18,2),@i INT,@xmlPath VARCHAR(200)
DECLARE @PriceName VARCHAR(10)='Price2'
SET @s = '<row ProductID="1" Price1="111.00" Price2="222.00" Price3="333.00" Price4="444.00" Price5="555.00" Price6="666.00" Price7="777.00"/>'
SELECT @s.value('(/row/@*[local-name()=sql:variable( "@PriceName")])[1]','DECIMAL(18,2)')