web-dev-qa-db-ja.com

データベース内のすべてのテーブルに誤って名前を付けた

SQLデータベース内のすべてのテーブル(100以上)に2019_というプレフィックスの名前を誤って付けました

今までこれが良い考えではないことに気付きませんでした(2年後にSQLに戻っただけです)

それをサフィックスに一括スワップする方法、またはすべてのテーブルを削除する方法はありますか?開けられないようです。本当にそれらすべてを手動で通過する必要はありません。

これがばかげた質問であり、間違った用語をググる可能性がある場合の謝罪

よろしくお願いします!

9
Mandarin

あなたの状況では、おそらく次のようなスクリプトを使用して、すべてのsp_renameコマンドを生成します。

SELECT SCHEMA_NAME(schema_id) as schemaname, name as tablename, 
cmd = 'EXEC sp_rename ''' + SCHEMA_NAME(schema_id) + '.' + name + ''', ''' 
  + SUBSTRING(name, 6, 99) + ''';'
FROM sys.tables
WHERE type = 'U'
AND is_ms_shipped = 0
AND name LIKE '2019[_]%'

これは、sys.tablesシステムテーブルから名前を取得し、2019_で始まる名前のすべてのユーザー作成テーブルを見つけます。 sp_renameコマンドのリストが生成されます。これを新しいSSMSウィンドウにコピーし、実行前にコマンドが正しく見えることを注意深く確認できます。

これにより、これらのテーブルを参照する他のオブジェクト(ビュー、トリガー、ストアドプロシージャなど)が破壊されることに注意してください。したがって、このデータベースが開発の非常に早い段階にあることを願っています。

19
BradC

もともとコメントとして残された部分回答:

eagle275 :番号で始まるテーブル名は引き続き有効なSQLですが、SQL Serverから「読み取る」には、[dbo].[table_name]

strawberry :まず、バックアップを作成します。次に、データベースのスクリプトを生成して、お好みのテキストエディタで簡単に編集できます。

tibor-karaszi :「すべてのテーブルを削除する」と言うので、データベースを削除して新しいテーブルを作成する方が簡単でしょう。もちろん、データベース内に保持したいotherものがあるかどうかによって異なります。

david-spillett :DB内のビュー、ストアドプロシージャ、トリガー、関数なども、テーブル参照の更新が必要になります。更新されていないテーブルのオブジェクト名以外のオブジェクト名がある場合、これは自動化する重要なタスクとfafになる可能性があります。このDBが何らかの方法で稼働している場合、かなりの量のテスト時間の予算がない限り、今のところミスを残しておく方がよいでしょう。

2
user195398