2017-02-03 22 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

何がうまくいかない?クエリによって文字列が生成されます(実際には、行ごとに1つの文字列が設定された結果セット)。文字列を実行しますか? –

+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

は、これらのクエリを生成するための別の方法です。 3番目の列の内容をコピー(およびレビュー)して実行します。

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という名前のローカルDBに作成しました:-)必要に応じて変更してください –

関連する問題