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)
此过程将满足您的需求。您可以按如下方式运行它:
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)