分隔 (*) 所有列使用分量计

  • 本文关键字:分量 分隔 sql sql-server
  • 更新时间 :
  • 英文 :


我想将选择临时表获得的所有列(*)分成单个字符串。不知道列名。

假设记录只有一个。

Res1
Col1 Col2 Col3 ...科尔斯
Res2Res3...休息

假设如果你的表有多行,你想要多行,你可以做这样的事情。请注意,您的所有值都将隐式转换为varcharnvarchar,因此您允许 SQL Server 确定它将是什么。

假设您使用的是最新版本的 SQL Server,则可以执行此操作(如果没有,则需要使用旧的FOR XML PATH方法进行STRING_AGGCONCATCONCAT_WS(以及两者STUFF):

DECLARE @SchemaName sysname = N'YourSchema',
@TableName sysname = N'YourTable';
DECLARE @SQL nvarchar(MAX),
@CRLF nchar(2) = NCHAR(13) + NCHAR(10);
DECLARE @SQL nvarchar(MAX),
@CRLF nchar(2) = NCHAR(13) + NCHAR(10);
SELECT @SQL = N'SELECT CONCAT_WS('','',' + STRING_AGG(QUOTENAME(c.[name]),',') WITHIN GROUP (ORDER BY c.column_id) + N') AS YourColumns' + @CRLF +
N'FROM ' + QUOTENAME(@SchemaName) + N'.' + QUOTENAME(@TableName) + N';'
FROM sys.schemas s
JOIN sys.tables t ON s.schema_id = t.schema_id
JOIN sys.columns c ON t.object_id = c.object_id
WHERE s.[name] = @SchemaName
AND t.[name] = @TableName
--PRINT @SQL; --Your best friend;
EXEC sys.sp_executesql @SQL;

最新更新