【发布时间】:2017-10-03 13:24:11
【问题描述】:
我想重命名一个表的所有列名,给定一个字符串,新名称用逗号分隔。这是字符串:
declare @str varchar(max)='A,B,C'
表中的列数可能会有所不同,字符串中的名称数也可能会有所不同。因此,在 5 列表中,字符串将为 'A,B,C,D,E'。
我有一个列名如下的表:
col1 | col2 | col3
在预期的结果中,我希望:
A | B | C
更新 我试图遵循这条路:
SELECT
ORDINAL_POSITION
,COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'my_temp'
order by ORDINAL_POSITION asc
但我不知道如何拆分@sql 字符串,以便可以通过以下方式将其应用于结果:
ORDINAL_POSITION COLUMN_NAME sql_string
1 Col1 A
2 Col2 B
3 Col3 C
然后我可以轻松地创建一个字符串,如:
dynamic_sql='EXEC sp_rename my_table.' + COLUMN_NAME +',' + sql_string +', ''COLUMN'''
【问题讨论】:
-
所以主要问题是你不知道如何从这个输出“Col1, Col2, Col3, etc...”中的SCHEMA表中选择?
-
为什么需要自动化脚本来重命名表中的列?重命名列是很少发生的事情。如果您需要定期执行此操作,那听起来您的设计有很大的错误。
-
@SeanLange 我这里有这个案例stackoverflow.com/questions/8443802/…。但我的情况比那种情况好,因为我有一个带有列名的字符串。
-
所以你真正需要的是知道如何解析一个分隔字符串?我仍然说这个过程尖叫着事情发生了可怕的错误。
-
这是我选择的字符串拆分器。 sqlservercentral.com/articles/Tally+Table/72993 它返回每个分隔值的序号位置。这里还有其他几个很棒的选择。 sqlperformance.com/2012/07/t-sql-queries/split-strings
标签: sql sql-server