開発完了後にテーブルの名前を変更する最良の方法


8

SQL Server 2008 r2でデータベースのテーブルと列の名前を変更する最も簡単で信頼性の高い方法は何ですか?開発が完了し、いくつかの理由により、一部のテーブルの名前を変更し、列をいくつか削除する必要があります。

同義語を使用することはそれを行う良い方法ですか?準備すべき落とし穴は何ですか?列の名前を適切に変更するのにも役立ちますか?

これらのテーブルに関連する多くのスクリプトがあり、それらは.net開発者によってアプリケーションで参照されます。


新しいオブジェクト名を使用するために既存のアプリを変更する必要がないように、これらのデータベースオブジェクトの名前を変更してファサードを提供するつもりですか?
billinkc 2012年

回答:


10

アプローチは、アプリケーションが稼働しているかどうか、またはまだテスト中であるかどうかに依存すると思います。

テーブルの場合、最も安全な方法は、新しい名前を使用してシノニムを作成することです。この方法では、一度にすべてを変更することなく、一度に1つ(または一度に1つの参照)までアプリを変更できます。すべての変更が適切であると確信できるまで、シノニムを削除してテーブルの名前を変更する必要はありません。

CREATE SYNONYM dbo.NewName FOR dbo.OldName;
-- change app to point to dbo.NewName;

-- once all of your changes have been tested:
BEGIN TRANSACTION;
  DROP SYNONYM dbo.NewName;
  EXEC sp_rename N'dbo.OldName', N'NewName', N'OBJECT';
COMMIT TRANSACTION;

列の場合は、少し注意が必要です。代わりにビューを指すシノニムを作成できますが、ベーステーブルによっては、必ずしもすべてのビューが更新可能であるとは限りません。簡単な例として:

CREATE VIEW dbo.vNewName 
AS 
  SELECT Column1, NewColumnName = OldColumnName
    FROM dbo.OldName;

CREATE SYNONYM dbo.NewName FOR dbo.vNewName;

次に、上記のように、列へのすべての参照と新しいテーブル名を変更したら、単に次のようにします。

BEGIN TRANSACTION;
  DROP SYNONYM dbo.NewName;
  DROP VIEW dbo.vNewName;
  EXEC sp_rename N'dbo.OldName', N'NewName', N'OBJECT';
  EXEC sp_rename N'dbo.NewName.OldColumnName', N'NewColumnName', N'COLUMN';
COMMIT TRANSACTION;

アプリケーションが稼働しておらず、まだテストが行​​われている場合は、列の名前を変更し、グローバル検索後に問題が発生する箇所を修正して、アプリのコードや手順などで置換(またはSSDT、RedGateなどを使用したスマートリファクタリング)します。

アプリケーションが稼働中の場合は、もう少し生計を立てる必要があります。


変更を検証して+1し、自分のチームからがらくたになったアプローチを修正しました(もちろんdev enviroのみ)
RThomas

良い回答をありがとうございます。ただし、「このようにして、すべてを変更することなく、一度に1つ(または一度に1つ)のアプリを変更できます。それらをすぐに。」たとえば、最初にテーブルt1のシノニムを作成する必要があるという意味ですか?
スカイ

現在、開発段階ですが、これらのテーブルの名前を変更するコンポーネントのシステムはほぼ完成しています。システムがUATにデプロイされました。
スカイ

1
@Nazilaいいえ、つまり、table1のシノニム(およびtable2、table3などのシノニム)を作成できることを意味します。次に、1つのアプリ、1つのクラス、1つのモジュール、または1つのストアドプロシージャを変更して、シノニムを介して新しい名前を使用できます。コードの残りの部分では、古い名前を引き続き使用できます。すべてのコードが更新されるまで、シノニムを削除して名前を変更しません。
アーロンバートランド

0

テーブルと列の名前を変更するときに遭遇する多くの落とし穴があります。それらを呼び出す他のSQLまたはアプリケーションコードは、一致するように名前を変更する必要があります。そうしないと機能しません。Redgateは、依存するSQL veiws / functions / sprocsをすべて変更して変更できるかなり優れたツールをいくつか作成しています。私があなたに与えることができる最大のアドバイスは、最初にDEV環境でこれらの変更を行い、コードをどこでも修正したことを確認するためにTEST TEST TESTを行うことです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.