关于拼接字符串的一个细节问题

数据库 SQL Server
本文主要介绍了我们在利用SQL语句拼接带分隔符的字符串时的一个细节问题以及解决方案,希望能够对您有所帮助。

SQL Server数据库中,我们可能会因为工作的需要,必须拼接字符串。好多朋友喜欢这样拼接字符串(SQL Server 2008 R2,CTE部分是伪造的示例数据):

  1. WITH TEMP AS  
  2.  
  3. (  
  4.  
  5. SELECT 'A' AS ITEM  
  6.  
  7. UNION ALL  
  8.  
  9. SELECT 'B' AS ITEM  
  10.  
  11. UNION ALL  
  12.  
  13. SELECT 'C' AS ITEM  
  14.  
  15. )  
  16.  
  17. SELECT A.ITEM+',' AS [data()]  
  18.  
  19. FROM TEMP A  
  20.  
  21. FOR XML PATH('') 

这个QUERY会得到这样的XML:

A, B, C,

但是潜在的问题是当数据不是字符型的时候会出问题,试把CTE中的数据全部改为数字。

  1. WITH TEMP AS  
  2.  
  3. (  
  4.  
  5. SELECT 1 AS ITEM  
  6.  
  7. UNION ALL  
  8.  
  9. SELECT 2 AS ITEM  
  10.  
  11. UNION ALL  
  12.  
  13. SELECT 3 AS ITEM  
  14.  
  15. )  
  16.  
  17. SELECT A.ITEM+',' AS [data()]  
  18.  
  19. FROM TEMP A  
  20.  
  21. FOR XML PATH('') 

这个QUERY会报错:

Msg 245, Level 16, State 1, Line 2 Conversion failed when converting the varchar value ',' to data type int.

所以,我推荐的拼接方式是:

  1. WITH TEMP AS  
  2.  
  3. (  
  4.  
  5. SELECT 1 AS ITEM  
  6.  
  7. UNION ALL  
  8.  
  9. SELECT 2 AS ITEM  
  10.  
  11. UNION ALL  
  12.  
  13. SELECT 3 AS ITEM  
  14.  
  15. )  
  16.  
  17. SELECT A.ITEM AS [data()],','  
  18.  
  19. FROM TEMP A  
  20.  
  21. FOR XML PATH('') 

运行结果是:

1,2,3,

关于SQL Server数据库拼接字符串的问题就介绍这么多,如果要了解更多SQL Server数据库的问题,可以到这里来:http://database.51cto.com/sqlserver/,谢谢大家的支持!

【编辑推荐】

  1. 误删SQL Server日志文件后怎样附加数据库
  2. 如何配置Oracle 10g oem中的主机身份证明
  3. MSSQL数据库跨表和跨数据库查询方法简介
  4. 浅析SQL Server数据库专用管理员连接DAC的使用
  5. T-SQL行列相互转换命令:PIVOT和UNPIVOT使用详解
责任编辑:赵鹏 来源: 博客园
相关推荐

2021-08-13 07:00:43

Java字符串对象问题

2020-08-12 22:03:17

JavaScript开发技术

2013-06-24 15:16:29

Java字符串拼接

2011-07-11 16:00:22

字符串拼接

2021-05-31 07:57:00

拼接字符串Java

2011-07-11 15:36:44

JavaScript

2023-04-25 15:46:51

Python字符串

2024-03-11 06:05:00

C++字符串

2011-04-20 11:34:07

SQL字符串分割

2011-07-22 15:38:54

SQL Server数存储过程切割字符串

2021-06-11 18:08:00

Java字符串拼接

2021-10-31 23:01:50

语言拼接字符串

2019-12-25 15:41:50

JavaScript程序员编程语言

2022-11-25 07:53:26

bash脚本字符串

2010-01-06 10:07:35

.NET Framew

2022-08-14 09:01:27

代码字符串

2020-09-18 14:23:50

字符

2022-11-24 08:01:57

bash脚本字符串

2010-10-09 11:43:10

MYSQL字符串

2023-10-31 18:57:02

Java字符串
点赞
收藏

51CTO技术栈公众号