SQL Serverでは、sp_rename
を使用できます 列を含むオブジェクトの名前を変更するためのストアドプロシージャ。
例
デモンストレーションの例を次に示します。
EXEC sp_rename 't1.c1', 'c11';
これにより、c1
という列の名前が変更されます (t1
内 表)からc11
。
オブジェクトタイプを含む
3番目の引数としてオブジェクトタイプを含めることもできます。この場合、COLUMN
を使用できます :
EXEC sp_rename 'dbo.t1.c11', 'c1', 'COLUMN';
スキーマ名を含める
最初の列をスキーマ名で修飾することもできます。その場合、次のようになります。
EXEC sp_rename 'dbo.t1.c1', 'c11', 'COLUMN';
この例では、dbo
はスキーマ名ですが、該当するスキーマを使用する必要があります。
パラメータ名を含める
他のストアドプロシージャと同様に、sp_rename
を呼び出すときにパラメータ名を含めることもできます :
EXEC sp_rename
@objname = 'dbo.t1.c1',
@newname = 'c11',
@objtype = 'COLUMN';
参照を確認する
SQL Serverで列の名前を変更すると、おそらく次のようなメッセージが表示されます。
Caution: Changing any part of an object name could break scripts and stored procedures.
これは、列の名前を変更しても、SQLServerはしないためです。 その列への参照の名前を自動的に変更します。これは、テーブルの名前を変更する場合にも当てはまります。
上記の警告メッセージにもかかわらず、列の名前はとにかく変更されます。
名前が変更された列を参照するビューをクエリしようとすると、エラーが発生します。
SELECT * FROM vt1;
結果:
Msg 207, Level 16, State 1, Procedure vt1, Line 2 Invalid column name 'c1'. Msg 4413, Level 16, State 1, Line 1 Could not use view or function 'vt1' because of binding errors.>
このビューはc1
を参照しようとしています ただし、その列の名前は変更されているため、テーブルにその名前の列はありません。
このビューの定義は次のようになります:
CREATE VIEW vt1 AS
SELECT c1, c2 FROM dbo.t1;
新しい列名を参照するには、このビューを更新する必要があります。だから私たちはこれを行うことができます:
ALTER VIEW vt1 AS
SELECT c11, c2 FROM dbo.t1;
ビューをクエリすると、正しいデータが返されます。
したがって、列の名前を変更する前に、その列を参照するスクリプトとストアドプロシージャを常に確認する必要があります。新しい列名を参照するには、このようなスクリプトとプロシージャを更新する必要があります。
sys.sql_expression_dependencies
を使用できます このチェックを行うためのシステムカタログビュー。
計算列の名前の変更
SQL Serverでは、計算列の名前を変更することはできません。
計算列の名前を変更しようとすると、おそらく次のエラーメッセージが表示されます。
EXEC sp_rename 'dbo.t1.c3', 'c13', 'COLUMN';
結果:
Caution: Changing any part of an object name could break scripts and stored procedures. Msg 4928, Level 16, State 1, Procedure sp_rename, Line 689 Cannot alter column 'c3' because it is 'COMPUTED'.
この場合、c3
columnは、c2
の値に基づいて計算を行う計算列です。 列。
c2
の名前を変更しようとすると次のようになります 列。
EXEC sp_rename 'dbo.t1.c2', 'c12', 'COLUMN';
結果:
Msg 15336, Level 16, State 1, Procedure sp_rename, Line 563 Object 'dbo.t1.c2' cannot be renamed because the object participates in enforced dependencies.
この列には別のエラーが表示されます。このエラーは、計算された列がこの列に依存しているためです。
基本的に、計算列の名前を変更するには、列を削除して再度追加する必要があります。
例:
ALTER TABLE t1
DROP COLUMN c3;
ALTER TABLE t1
ADD c13 AS c2 * 10;
外部キー
主キー列の名前を変更しても、その列を参照する外部キーは壊れません。
たとえば、t1.c1
の名前を変更する前 t1.c11
へ 、言及しませんでしたが、実際には別のテーブルと列がありました(t2.c2
)t1.c1
を参照している 。
t1.c1
の名前を変更した後 t1.c11
へ 、t2.c2
の外部キー制約 他のテーブルの主キー列の名前が変更されていても、外部キーに準拠するように新しい挿入を強制していました。