T-SQL:在 table 中获取以制表符分隔的列名列表 - 我的示例有什么问题?

T-SQL: Get a tab-separated list of column names in a table - What's wrong with my example?

此 SQL returns table 'MyTable'

的逗号分隔列名列表
DECLARE @colnames VARCHAR(max);

SELECT
    @colnames = COALESCE(@colnames + ',', '') + column_name
FROM
    CORP_MLR_Rebates.INFORMATION_SCHEMA.COLUMNS
WHERE
    table_name = 'MyTable';

SELECT @colnames;

为什么下面没有给我一个制表符分隔的相同列的列表?相反,它是 space 分隔的。

DECLARE @colnames VARCHAR(max);

SELECT
    @colnames = COALESCE(@colnames + char(9), '') + column_name
FROM
    CORP_MLR_Rebates.INFORMATION_SCHEMA.COLUMNS
WHERE
    table_name = 'MyTable';

SELECT @colnames;

在我的测试中它确实有效,我想这只是取决于你如何检索结果(我必须将结果输出到文件以获得正确的结果)

您可能会使用 SSMS GUI 获得空间。将结果作为文本或文件返回给你标签;例如字符(9)。考虑这三个都可以完成工作的查询:

;--== 1. Updatable Variable
DECLARE @colnames VARCHAR(max);

SELECT @colnames = COALESCE(@colnames + CHAR(9), '') + column_name
FROM   INFORMATION_SCHEMA.COLUMNS AS c;

SELECT ColNames = @colnames;

;--== 2. Using STRING_AGG
SELECT ColNames = STRING_AGG(c.COLUMN_NAME , CHAR(9))
FROM   INFORMATION_SCHEMA.COLUMNS AS c;

;--== 3. Using FOR XML PATH
SELECT ColNames = 
  (SELECT c.COLUMN_NAME+CHAR(9) FROM INFORMATION_SCHEMA.COLUMNS AS c FOR XML PATH(''));

结果:

如果我们切换到Results as Text

现在我们得到(注意制表符):