web-dev-qa-db-ja.com

SQL Server 2008の列名を変更する

SQL Server 2008とNavicatを使用しています。 SQLを使用してテーブル内の列の名前を変更する必要があります。

ALTER TABLE table_name RENAME COLUMN old_name to new_name;

この文は機能しません。

531
Serhio g. Lazin

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'

値を囲むには、一重引用符を使用することを忘れないでください。 

999
Habib

SQLの代わりに、Microsoft SQL Server Management Studioでこれを実行できます。 GUIを使用した簡単な方法は次のとおりです。

ファーストウェイ

列をゆっくりダブルクリックします。列名が編集可能なテキストボックスになります。


セカンドウェイ

列を右クリックして、コンテキストメニューから名前の変更を選択します。

例えば:

To Rename column name


第三の方法

この方法は、一度に複数の列の名前を変更する必要がある場合に適しています。

  1. 名前の変更が必要な列が含まれているテーブルを右クリックします。
  2. デザイン をクリックします。
  3. テーブルデザインパネルで、変更する列名のテキストボックスをクリックして編集します。

例えば:MSSMS Table Design Example

注: OPは特にSQLソリューションを求めていることを知っています。これは他の人に役立つかもしれないと思いました:)

86
Carrie Kendall

試してください:

EXEC sp_rename 'TableName.OldName', 'NewName', 'COLUMN'
52
TechDo

テーブルのスキーマも指定する必要があります。そうしないと、このエラーが発生する可能性があります。

メッセージ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';
16
Taher

既に組み込まれている関数を使用するのは良い提案ですが、他の方法は:

  1. 同じデータ型と新しい名前で新しい列を作成します。 
  2. UPDATE/INSERT文を実行して、すべてのデータを新しい列にコピーします。 
  3. 古い列を削除します。

sp_renameを使うことの背後にある利点は、それがそれに関連するすべての関係の面倒を見るということです。

のドキュメントから

主キー制約または一意制約の名前が変更されると、sp_renameは自動的に関連付けられたインデックスの名前を変更します。名前が変更されたインデックスがPRIMARY KEY制約に関連付けられている場合、PRIMARY KEY制約もsp_renameによって自動的に名前変更されます。 sp_renameを使用して、プライマリXMLインデックスとセカンダリXMLインデックスの名前を変更できます。

15
NeverHopeless

sp_rename を使用して列の名前を変更できます。

USE YourDatabase;  
GO  
EXEC sp_rename 'TableName.OldColumnName', 'NewColumnName', 'COLUMN';  
GO  

最初のパラメータは変更されるオブジェクト、2番目のパラメータはオブジェクトに付けられる新しい名前、3番目のパラメータ _ column _ は名前の変更がcolumnに対するものであることをサーバーに通知しますtablesindexおよびalias data typeの名前変更にも使用できます。

12

私はよくここに来て括弧の使い方を考えているので、この答えは私のような人には役に立つかもしれません。

EXEC sp_rename '[DB].[dbo].[Tablename].OldColumnName', 'NewColumnName', 'COLUMN'; 
  • OldColumnName[]にあってはいけません。うまくいかないだろう。
  • NewColumnName[]に入れないでください。[[NewColumnName]]になります。
9
HonzaB

SQL Server Management Studioには、システム定義のストアドプロシージャ(SP)がいくつかあります。
そのうちの1つは、列の名前変更に使用されます。SPは、 sp_rename です。 

構文:sp_rename '[table_name] .old_column_name'、 'new_column_name'
さらに助けが必要な場合は、この記事を参照してください。 Microsoft Docsによるsp_rename

注:このSPを実行すると、SQLサーバから「」のような警告メッセージが表示されます。 procedure 'これは、変更しようとしているテーブル内の列を含む独自のspを書いた場合にのみ重要です。

2
Tahir77667

@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
1
Rikin Patel

または、SQL Management Studioの列を2回ゆっくりクリックして、UIから名前を変更することもできます。

0
Dave Cole