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
:
现在我们得到(注意制表符):
此 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
:
现在我们得到(注意制表符):