Циклы и переименование столбцов таблицы #Temp - PullRequest
1 голос
/ 21 января 2011

У меня есть #TempTble, который выглядит следующим образом:

Col1,Col2,5,8,19,....

Кроме того, у меня есть еще одна таблица с описанием, которая соответствует ключам в #TempTble:

key   Descr    
===   ====    
5     Descr1    
8     Descr2    
19    Descr3

Какойэто лучший способ перебрать #TempTble и переименовать его столбцы с соответствующими описаниями, чтобы он выглядел так:

Col1,Col2,Descr1,Descr2,Descr3,...

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 21 января 2011
IF object_id('tempdb..#Temp') IS NOT NULL DROP TABLE #Temp

declare @map table ([key] sysname,Descr sysname)

INSERT INTO @map
select 5,'Descr1' UNION ALL
select 8,'Descr2' UNION ALL    
select 19,'Descr3'

create table #Temp ([Col1] int,[Col2] int,[5] int,[8] int,[19] int)

DECLARE @name nvarchar(1035), @descr sysname;

DECLARE ColumnCursor CURSOR 
LOCAL FORWARD_ONLY STATIC READ_ONLY TYPE_WARNING
FOR SELECT 'tempdb..#Temp.' + QUOTENAME(name), Descr
FROM tempdb.sys.columns 
JOIN @map m ON m.[key]=name
where object_id=object_id('tempdb..#Temp');

OPEN ColumnCursor;
FETCH NEXT FROM ColumnCursor INTO @name, @descr;
WHILE @@FETCH_STATUS = 0
BEGIN;
 EXECUTE tempdb..sp_rename @name, @descr,'COLUMN';
FETCH NEXT FROM ColumnCursor INTO @name, @descr;
END;
CLOSE ColumnCursor;
DEALLOCATE ColumnCursor;

SELECT * FROM #Temp
0 голосов
/ 24 января 2011

Это плохой дизайн Один из вариантов - запустить этот код, скопировать результат и запустить его снова

select 'exec tempdb..sp_rename ''#temp.['+t1.name+']'','''+t2.descrip+'''' 
from tempdb..syscolumns as t1 inner join mytable as t2 on t1.name=t2.[key] 
where id=OBJECT_ID('tempdb..#temp') and t1.name like '[0-9]%'
...