for xml path 应用

读别人写的东西,无意中看到这样一句话

select @str=stuff((select ','+vc_product_name from #temptable for xml path('')),1,'')

sqlserver的存储过程中执行了一下可以把临时表#temptable 中的vc_product_name取出来并用‘,’号隔开并赋值给字符串,用以返回错误信息。很巧妙的用法,在网上搜索了一下解释是:“这一整句的作用是将多行vc_product_name字段的内容串联起来,用逗号分隔。”


先查stuff 函数,在指定的起点处删除指定长度的字符并插入另一组字符,显然是staff(****,'')的用法,应该是去掉括号中的第一个字符。


不过 fro xml path的用法之前真没见过,用sqlserver的联机帮助查了一下,原来是sqlserver 2005以上的版本可以将查询结果集以xml形式展现(PS,当看到xml的时候也是一头雾水,这是我的硬伤,对前台页面语言诸如此类一窍不通,不过简单百度了一下,了解到应该和html类似)。

自己写了三个语句,用于理解这个用法

select vc_product_name from #temptable for xml path

select vc_product_name from #temptable for xml path('')

select ','+vc_product_name from #temptable for xml path('')


执行第一句,结果以<row><vc_product_name>分割#temptable 表中的vc_product_name列;

执行第二句,结果以<vc_product_name>分割#temptable 表中的vc_product_name列,显然语句最后的('')可以替换xml语句中的<row>;

执行第三句,结果以‘,’分割#temptable 表中的vc_product_name列,显然select后面的‘,’用以做分隔符,而path 后的('')的替换xml语句中的<row>。


这个用法因为之前没有见过,觉得很新鲜,而且在存储过程中赋给变量用以返回错误信息,用法很巧妙。

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念