使用表的字段值重命名SQL表的列

nei*_*dds 5 sql t-sql sql-server csv

我试图执行一个SQL查询,该查询将使用表中第一个记录集中的文本重命名表的列.

我的表看起来像这样:

 COL1  |  COL2  |  COL3  |  COL4  |  COL5  | COL6

 REASON |ITEMDATE|ITEMTIME|SITENAME|  EVENT | RPM  
 tstamp |12-11-07|  24:12 | Spain1 |Shutdwn | 1000  
 tstamp |13-11-07|  02:22 | Spain1 |Startup | 1050
Run Code Online (Sandbox Code Playgroud)

我想重命名这样的列:

 REASON |ITEMDATE|ITEMTIME|SITENAME|  EVENT | RPM

 tstamp |12-11-07|  24:12 | Spain1 |Shutdwn | 1000  
 tstamp |13-11-07|  02:22 | Spain1 |Startup | 1050 
Run Code Online (Sandbox Code Playgroud)

Fil*_*Vos 5

此过程将满足您的需求。您可以按如下方式运行它:

    exec p_rename_columns N'<mytable>'
Run Code Online (Sandbox Code Playgroud)

请注意,该过程假定“第一”行是磁盘上的物理第一行。由于这可能会根据表上的聚集索引使用的字段而变化,因此不能 100% 保证。

程序代码:

create proc p_rename_columns (@table sysname)
AS

declare @name sysname, 
        @col sysname,
        @sql nvarchar(max)

declare cur cursor 
local read_only 
for select name 
      from sys.columns 
     where object_id = object_id(@table)

open cur
fetch next from cur into @name

while @@fetch_status = 0 
  begin

    select @sql = N'select top (1) @col = ' + quotename(@name) + N' from ' + quotename(@table)
    exec sp_executesql @sql, N'@col sysname output', @col output

    select @sql = N'exec sp_rename ''' + quotename(@table) + N'.' + quotename(@name) + N''', ''' + @col + N''''
    exec (@sql)

    fetch next from cur into @name
  end 
close cur
deallocate cur

select @sql = N'DELETE TOP (1) from ' + quotename(@table)
exec (@sql)
GO
Run Code Online (Sandbox Code Playgroud)