微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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>。


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

原文地址:https://www.jb51.cc/xml/299225.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。