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の外部キー制約 他のテーブルの主キー列の名前が変更されていても、外部キーに準拠するように新しい挿入を強制していました。