回答:
使用する sp_rename
EXEC sp_RENAME 'TableName.OldColumnName' , 'NewColumnName', 'COLUMN'
参照:SQL SERVER –列名またはテーブル名を変更する方法
ドキュメント:sp_rename(Transact-SQL)
あなたの場合、それは:
EXEC sp_RENAME 'table_name.old_name', 'new_name', 'COLUMN'
値は単一引用符で囲んでください。
EXEC sp_RENAME '[TableName].[OldColumnName]', 'NewColumnName', 'COLUMN'
alter table
、そのような制約が存在する場合に失敗します。
の代わりにSQL
、Microsoft SQL Server Management Studioでこれを行うことができます。GUIを使用するいくつかの簡単な方法を次に示します。
列をゆっくりとダブルクリックします。列名が編集可能なテキストボックスになります。
列を右クリックし、コンテキストメニューから[名前変更]を選択します。
例えば:
この方法は、一度に複数の列の名前を変更する必要がある場合に適しています。
例えば:
注:私はOPが特にSQLソリューションを求めていることを知っています。
テーブルのスキーマも指定する必要があります。そうしないと、次のエラーが発生する可能性があります。
メッセージ15248、レベル11、状態1、プロシージャsp_rename、行238パラメータ@objnameがあいまいであるか、要求された@objtype(COLUMN)が間違っています。
展開スクリプトの場合は、セキュリティを強化することもお勧めします。
IF EXISTS (
SELECT 1
FROM sys.columns
WHERE
name = 'OldColumnName' AND
object_name(object_id) = 'TableName'
) AND
NOT EXISTS (
SELECT 1
FROM sys.columns
WHERE
name = 'NewColumnName' AND
object_name(object_id) = 'TableName'
)
EXEC sp_RENAME 'SchemaName.TableName.OldColumnName', 'NewColumnName', 'COLUMN';
すでに組み込まれている関数を使用することをお勧めしますが、別の方法は次のとおりです。
を使用することの背後にある利点sp_rename
は、それに関連するすべての関係を処理することです。
ドキュメントから:
sp_renameは、PRIMARY KEYまたはUNIQUE制約の名前が変更されるたびに、関連するインデックスの名前を自動的に変更します。名前が変更されたインデックスがPRIMARY KEY制約に関連付けられている場合、PRIMARY KEY制約もsp_renameによって自動的に名前が変更されます。sp_renameを使用して、プライマリおよびセカンダリXMLインデックスの名前を変更できます。
を使用sp_rename
して、列の名前を変更できます。
USE YourDatabase;
GO
EXEC sp_rename 'TableName.OldColumnName', 'NewColumnName', 'COLUMN';
GO
最初のパラメータを変更する目的で、2番目のパラメータは、オブジェクトを説明する新たな名前であり、そして第3のパラメータCOLUMNは、名前の変更のためのものであることをサーバに通知しcolumn
、また、名前を変更するために使用することができtables
、index
そしてalias data type
。
SQL Server管理スタジオには、システム定義のストアドプロシージャ(SP)がいくつかあります。
その1つは列の名前を変更するために使用されます。SPはsp_renameです。
構文: sp_rename '[table_name] .old_column_name'、 'new_column_name'
詳細については、この記事を参照してください: sp_rename by Microsoft Docs
注:このSPを実行すると、SQLサーバーから「警告:オブジェクト名の一部を変更するとスクリプトやストアドプロシージャが壊れる可能性があります」という警告メッセージが表示されます。これは、列を含む独自のspを作成した場合にのみ重要ですテーブルで変更しようとしています。
@Taherの改良版
DECLARE @SchemaName AS VARCHAR(128)
DECLARE @TableName AS VARCHAR(128)
DECLARE @OldColumnName AS VARCHAR(128)
DECLARE @NewColumnName AS VARCHAR(128)
DECLARE @ParamValue AS VARCHAR(1000)
SET @SchemaName = 'dbo'
SET @TableName = 'tableName'
SET @OldColumnName = 'OldColumnName'
SET @NewColumnName = 'NewColumnName'
SET @ParamValue = @SchemaName + '.' + @TableName + '.' + @OldColumnName
IF EXISTS
(
SELECT 1 FROM sys.columns WHERE name = @OldColumnName AND OBJECT_NAME(object_id) = @TableName
)
AND NOT EXISTS
(
SELECT 1 FROM sys.columns WHERE name = @NewColumnName AND OBJECT_NAME(object_id) = @TableName
)
BEGIN
EXEC sp_rename @ParamValue, @NewColumnName, 'COLUMN';
END