SQL查询-将列转换成字符串(for xml path)

背景

最近做一报表,因为查询的SQL很长很复杂,导致直接查询出现异常,后来想到将大量重复的只是查询条件不同的子查询放到函数中去做,无奈需要的参数不能传进函数中,因为参数格式类似如:'ProjGUID1','ProjGUID2' 这样,这是报表工具生成的,无法修改。现在就要想办法让参数能传进函数中或是换用其他的方式。

思路

1、首先想到的是用存储过程,但是在报表工具中调试不通,存储过程不能得到有效的执行,可能是根本就不支持存储过程;

2、将参数作为in的条件,查询出符合条件的GUID,返回的是一个表,然后循环表的行记录,拼接GUID传入函数,但是报表工具中的SQL不支持定义变量和临时表,此方法也行不通;

3、利用SQL语句的For Xml 将GUID查询成一个XML结构的字符串,但传入函数中后解析该XML需要用到系统存储过程sp_xml_preparedocument ,函数中并不支持调用存储过程,此路也不通。关于SQL中解析XML可以参见我之前的博文《使用sp_xml_preparedocument处理XML文档》。

解决方法

上面说到了SQL的For Xml可以将查询的列转换成XML结构的字符串,还有一种方法可以将查询的字段转换成以特定符号隔开的字符串,那就是For Xml Path:

SELECT TOP 2 CONVERT(VARCHAR(40),ProjGUID)+',' FROM p_Project FOR XML PATH('')

上面的语句得到的结果如下:

BAA95B67-FC41-4A78-AF1C-014BBE0AC368,37641496-23AA-46CB-9817-027AA120F5C6,

至此问题解决,这样的字符串是可以传进函数的,只需将最后的逗号去掉即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值