SQL Server 2008 r2でデータベースのテーブルと列の名前を変更する最も簡単で信頼性の高い方法は何ですか?開発が完了し、いくつかの理由により、一部のテーブルの名前を変更し、列をいくつか削除する必要があります。
同義語を使用することはそれを行う良い方法ですか?準備すべき落とし穴は何ですか?列の名前を適切に変更するのにも役立ちますか?
これらのテーブルに関連する多くのスクリプトがあり、それらは.net開発者によってアプリケーションで参照されます。
SQL Server 2008 r2でデータベースのテーブルと列の名前を変更する最も簡単で信頼性の高い方法は何ですか?開発が完了し、いくつかの理由により、一部のテーブルの名前を変更し、列をいくつか削除する必要があります。
同義語を使用することはそれを行う良い方法ですか?準備すべき落とし穴は何ですか?列の名前を適切に変更するのにも役立ちますか?
これらのテーブルに関連する多くのスクリプトがあり、それらは.net開発者によってアプリケーションで参照されます。
回答:
アプローチは、アプリケーションが稼働しているかどうか、またはまだテスト中であるかどうかに依存すると思います。
テーブルの場合、最も安全な方法は、新しい名前を使用してシノニムを作成することです。この方法では、一度にすべてを変更することなく、一度に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などを使用したスマートリファクタリング)します。
アプリケーションが稼働中の場合は、もう少し生計を立てる必要があります。