2014-11-03 113 views
0

为什么这个查询没有执行?如何在不声明XML的情况下执行子查询?

SELECT [Value] = T.c.value('.','varchar(30)') FROM (SELECT '<s>'+ REPLACE ((select tag_id+',' from tbl_container_track for xml path('')),',','</s> <s>')+ '</s>').nodes('/s') T(c)

但是这一次是工作?

declare @X xml 
 
SELECT @X = (SELECT '<s>'+ REPLACE ((select tag_id+',' from tbl_container_track for xml path('')),',','</s> <s>')+ '</s>') 
 
SELECT [Value] = T.c.value('.','varchar(30)') FROM @X.nodes('/s') T(c)

有人能帮我没有宣布@X简化?

回答

1

试试这个:强制转换为XML数据类型,你错过了

SELECT [Value] = T.c.value('.', 'varchar(30)') 
FROM (SELECT Cast(('<s>' + Replace ((SELECT tag_id+',' FROM tbl_container_track FOR xml path('')), ',', '</s> <s>') 
         + '</s>') AS XML)) AS Data 
     CROSS APPLY Data.nodes('/s') T(c) 
+0

错误显示.... 没有列名于“数据”第1栏指明。 – 2014-11-04 09:58:36

+0

施放操作后给列添加别名 – knkarthick24 2014-11-04 10:10:41

+0

谢谢!它的工作! – 2014-11-04 10:23:31