2017-02-03 35 views
0

我有10000列,其中有空格。我想刪除所有10000列名稱中的所有空格。刪除10000列的列名空間SQL Server

輸入:the first column name

輸出:thefirstcolumnname


我的嘗試:

select 'EXEC sp_rename '''+mytable+'.['+column_name+']'',''['+column_name+']'','''+replace(column_name,' ','')+'''' 
from information_schema.columns 
where column_name like '% %' 

但是,這是行不通的。我懷疑我需要在column_name進行一些更改,但我不知道如何。

錯誤:Invalid column name 'table name'.這是什麼意思?

+0

什麼不行?你的查詢產生一個字符串(或者實際上是每行有一個字符串的結果集)。你曾經執行過這個字符串嗎? –

+0

@GordonLinoff我試過了。錯誤信息已更新。 –

+0

如果只有100列,爲什麼不手動做每一個? –

回答

1

這是你想要什麼:

SELECT 'EXEC sp_rename '''+QUOTENAME(TABLE_CATALOG)+'.'+QUOTENAME(TABLE_SCHEMA)+'.'+QUOTENAME(TABLE_NAME)+'.'+QUOTENAME(column_name)+''','''+REPLACE(column_name, ' ', '')+''',''COLUMN''' 
FROM information_schema.columns 
WHERE column_name LIKE '%' 
     AND TABLE_NAME = 'your table name here'; 
+0

我用這個腳本,但新表似乎沒有改變。 –

+0

@JohnHass現在嘗試我改變了它有一個錯誤 –

1

這裏是另一種方式來產生這些查詢。複製(並查看)並運行第三列的內容。

SELECT 
    ta.name, co.name 
    ,replace(replace(replace(replace('EXECUTE sp_rename ''<schemaName>.<tableName>.[<columnName>]'', ''<fixedColumnName>'', ''column''' 
    ,'<schemaName>', schema_name(ta.schema_id)) 
    ,'<tableName>', ta.name) 
    ,'<columnName>', co.name) 
    ,'<fixedColumnName>', replace(co.Name, ' ', '')) 
from sys.tables ta 
    inner join sys.columns co 
    on co.object_id = ta.object_id 
where co.name like '% %' 
order by 
    ta.name, co.name 
+0

對於這樣的管理級別的東西,我強烈建議生成腳本,檢查它,然後運行審查的腳本。 –

+0

瞭解。我正在運行一個重複的表格進行測試。 –

1
create table t1 ([col] int,[another col] int,[yet another col] int); 
create table t2 ([also a col] int,[col] int); 

select  'exec sp_rename ''' + QUOTENAME(table_name) + '.' + QUOTENAME(column_name) + ''',''' + replace(column_name,' ','') + ''',''column''' 
from  information_schema.columns 
where  table_catalog = 'dmarkovitz' 
     and column_name like '% %' 

exec sp_rename '[t1].[another col]','anothercol','column' 
exec sp_rename '[t1].[yet another col]','yetanothercol','column' 
exec sp_rename '[t2].[also a col]','alsoacol','column' 

select  table_name,column_name 
from  information_schema.columns 
where  table_catalog = 'dmarkovitz' 
     and table_name in ('t1','t2') 

+------------+---------------+ 
| table_name | column_name | 
+------------+---------------+ 
| t1   | col   | 
+------------+---------------+ 
| t1   | anothercol | 
+------------+---------------+ 
| t1   | yetanothercol | 
+------------+---------------+ 
| t2   | alsoacol  | 
+------------+---------------+ 
| t2   | col   | 
+------------+---------------+ 
+0

什麼是'table_catalog ='dmarkovitz''?我從'information_schema.columns'中選擇,它返回一個空表。 –

+0

我在一個名爲dmarkovitz的本地數據庫上創建了這個示例:-)根據需要進行更改 –