SQL查询-将列转换成字符串(for xml path)
2013-03-19 21:50
531 查看
背景
最近做一报表,因为查询的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,
至此问题解决,这样的字符串是可以传进函数的,只需将最后的逗号去掉即可。
相关文章推荐
- sql server 使用for xml path 将1列多行转换为字符串连接起来,俗称 sql 合并字符
- SQL 字段charindex,stuff,ltrim, for xml path('') 操作字符串 合并查询结果项值
- SQL-For xml Path 字符串连接
- SQL SERVER中 用FOR XML PATH将查询结果以XML输出 然后应用于 sql 合并字段功能介绍
- [已解决]:通过sql for xml查询到的xml字符串,如何存为标准格式的xml文件?
- SQL——用FOR XML Path完成字符串的聚合
- 使用 SQL的 for xml path来进行字符串拼接
- sqlserver 用 STUFF 和 for xml path 把查询结果连接成字符串
- for xml path以及sql合并查询
- 在sql语句中使用 xml for path 格式化字符串的方法总结
- 使用 SQL的 for xml path来进行字符串拼接 (group by)
- sql server FOR XML PATH 字符串拼接
- 使用 SQL的 for xml path来进行字符串拼接
- MS SQL_使用for xml path 将1列多行转换为字符串连接起来
- sql server 使用for xml path 将1列多行转换为字符串连接起来
- T-SQL系列之合并多行查询数据到一行:FOR XML PATH
- 使用 SQL的 for xml path来进行字符串拼接
- 查询 SQL_Server 所有表的记录数: for xml path
- sql server 使用for xml path 将1列多行转换为字符串连接起来
- sql server 使用for xml path 将1列多行转换为字符串连接起来