2010-05-27 17 views
6

मेरे पास कॉलम नामों में विशेष वर्ण % _ - के साथ CSV फ़ाइल से आयातित 600+ कॉलम वाली एक तालिका है। क्या इन विशेष वर्णों को हटाने के लिए कॉलम नाम बदलने का कोई तरीका है?मैं टी-एसक्यूएल में SQL सर्वर कॉलम नाम कैसे बदलूं?

कोड टी-एसक्यूएल में हो सकता है।

+3

मैं TSQL के बारे में पता नहीं है, लेकिन मुझे लगता है कि मैं जवाब पता tsql में। – JohnFx

उत्तर

8

आप INFORMATION_SCHEMA.COLUMNS क्वेरी और स्तंभों का नाम बदलने के sp_rename स्क्रिप्ट उत्पन्न कर सकते हैं।

SELECT 'EXEC sp_rename ''' + TABLE_NAME + '.' + QUOTENAME(COLUMN_NAME) + ''', ''' + REPLACE(COLUMN_NAME, '%', '') + ''', ''COLUMN''; ' 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE COLUMN_NAME LIKE '%[%]%' 

यहाँ a permalink to an actual runnable example

5

क्या आप इसका उपयोग कर सकते हैं?

sp_RENAME 'Table.ColumnName%', 'NewColumnName' , 'COLUMN' 
9

sp_rename?

EXEC sp_rename 'table.[Oh%Dear]', 'OhDear', 'COLUMN'; 

(sp_rename में [ ] के बारे में नहीं था यकीन है) उदाहरण के काम

CREATE TABLE foo ([Oh%Dear] int) 

EXEC sp_rename 'foo.[Oh%Dear]', 'OhDear', 'COLUMN' 

EXEC sys.sp_help 'foo' 
3

यहाँ एक उदाहरण है कि होगा एक मेज और बदलाव पर पाश को रेखांकित और प्रतिशत चिह्न

create table Test ([col%1] varchar(50),[col_2] varchar(40)) 
go 

select identity(int,1,1) as id ,column_name,table_name into #loop 
from information_schema.columns 
where table_name = 'Test' 
and column_name like '%[%]%' 
or column_name like '%[_]%' 


declare @maxID int, @loopid int 
select @loopid =1 
select @maxID = max(id) from #loop 

declare @columnName varchar(100), @tableName varchar(100) 
declare @TableColumnNAme varchar(100) 
while @loopid <= @maxID 
begin 


select @tableName = table_name , @columnName = column_name 
from #loop where id = @loopid 

select @TableColumnNAme = @tableName + '.' + @columnName 
select @columnName = replace(replace(@columnName,'%',''),'_','') 
EXEC sp_rename @TableColumnNAme, @columnName, 'COLUMN'; 

set @loopid = @loopid + 1 
end 

drop table #loop 

select * from Test 
संबंधित मुद्दे