2011-09-09 21 views
0

テーブルがあるとします:UltimateTableそれは列:UltimateColumn1,UltimateColumn2を持っています。彼らは私が私がsp_MSForEachTableでテーブルを反復処理することができると信じてSQL - データベース内のすべてのテーブル列の名前をプログラムで変更します。

UltimateTable_UltimateColumn1
UltimateTable_UltimateColumn2

と改名されなければなりません。 T-SQLを使用した例で、1つのデータベース内のすべてのテーブルの名前を変更するにはどうすればよいですか?

エイリアスが行うときに、多くの人が列名にテーブル名を追加するファンではないことは知っています。それを乗り越える。それは会社の標準です。

(J/K私もそれを嫌う...)

+3

表の名前には、列名の前に接頭辞を付けないでください。期間。ただしないでください –

+0

sp_MSForEachTableを使用しないでください。それはsp_MSForEachDBと同じ厄介なカーソルの問題を抱えています(http://sqlblog.com/blogs/aaron_bertrand/archive/2010/12/29/a-more-reliable-and-more-flexible-sp-msforeachdb.aspxとhttp ://www.mssqltips.com/sqlservertip/2201/making-a-more-reliable-and-flexible-spmsforeachdb/) –

+0

@ミッチ小麦 - 私はしたい**私はする必要はありませんでした。私が元の投稿で言ったように、私はそれが嫌いです。しかし、あなたが私の仕事まで来てリード開発者とDBAに会社の標準を変えるように説得しない限り、それは実行されなければなりません。実際、私はdevフェーズ中に酷い恐ろしい標準に従わなかったので、今戻ってこれを行う必要があります。 –

答えて

3

私は、これは真剣に悪い考えであり、あなたは死にそれを戦う必要があることをミッチに同意します。つまり、カタログビュー(ではなく、 sp_MSForEachTable)を使用してこのタイプのスクリプトを生成する簡単な方法がありますが、それでも列名ではなくテーブル名のみが取得されます。 1つのウィンドウで

を実行し、この:今すぐ

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

は、新しいウィンドウに出力をコピーして貼り付けます。実行する前にチェックし、まずテストデータベースでテストしてください!

+0

sp_msforeach ...ルーチンの不足を引き起こすためのThx。私はそれを知らなかった。 –

関連する問題