经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MS SQL Server » 查看文章
数据表列值转换为逗号分隔字符串
来源:cnblogs  作者:Insus.NET  时间:2019/5/13 8:54:15  对本文有异议

在开发SQL Server语序中,可能需要这样一个要求,把表中某一列的所有值转换为使用逗号分隔的字符串去呈现出来。

举个例子:

 

  1. IF OBJECT_ID('tempdb..#tempTable') IS NOT NULL
  2. BEGIN
  3. DROP TABLE #tempTable
  4. END
  5.  
  6. CREATE TABLE #tempTable ([ID] INT NOT NULL,[Category] NVARCHAR(40) NULL)
  7. INSERT INTO #tempTable ([ID],[Category]) VALUES (1,'Table'),
  8. (2,'View'),
  9. (3,'Store Procedure'),
  10. (4,'Table-valued Function'),
  11. (5,'Scalar-valued Function'),
  12. (6,'User-Defined Table Type')
  13. SELECT [ID],[Category] FROM #tempTable
  14. GO
Source Code

 

要求结果,[ID]或[Category]任意一列,呈现如下:

 

日后,我们不清楚是哪一张表,哪一个字段。

因此,可以写成一个动态的SQL 存储过程来处理:

 

  1. SET ANSI_NULLS ON
  2. GO
  3. SET QUOTED_IDENTIFIER ON
  4. GO
  5. -- =============================================
  6. -- Author: Insus.NET
  7. -- Create date: 2019-05-11
  8. -- Update date: 2019-05-11
  9. -- Description: 列值转换为逗号分隔字符串
  10. -- =============================================
  11. CREATE PROCEDURE [dbo].[usp_TableColumnValueToCommaDelimitedString] (
  12. @tableName SYSNAME,
  13. @columnName SYSNAME,
  14. @ReturnValue NVARCHAR(MAX) OUTPUT
  15. )
  16. AS
  17. BEGIN
  18. DECLARE @sql NVARCHAR(MAX) = N'
  19. DECLARE @temporary_table AS TABLE([multirow_comma-delimited_string] NVARCHAR(MAX))
  20. INSERT INTO @temporary_table ([multirow_comma-delimited_string])
  21. SELECT TOP(1) STUFF(
  22. REPLACE(
  23. RTRIM(
  24. (SELECT ''|'' + CAST('+ @columnName +' AS NVARCHAR(MAX)) FROM '+ @tableName +' FOR XML PATH('''') )
  25. ),
  26. ''|'','', ''),
  27. 1,1,'''') FROM '+ @tableName +'
  28. SELECT @ReturnValue = [multirow_comma-delimited_string] FROM @temporary_table'
  29.  
  30. EXECUTE sp_executesql @sql,
  31. N'@ReturnValue NVARCHAR(MAX) OUTPUT',
  32. @ReturnValue OUTPUT
  33. END
Source Code

 

只要为上面存储过程传入表名,字段名等参数即可得到我们想要的结果:

 

原文链接:http://www.cnblogs.com/insus/p/10848578.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号