SQL Serverでテーブルの名前を変更する方法


370

SQL私が使用しているというクエリは次のとおりです。

ALTER TABLE oldtable RENAME TO newtable;

しかし、それは私にエラーを与えます。

サーバー:メッセージ156、レベル15、状態1、行1
キーワード 'TO'付近の構文が正しくありません。

回答:


683

SQL Serverでテーブルの名前を変更するには、sp_rename次のコマンドを使用します。

exec sp_rename 'schema.old_table_name', 'new_table_name'

7
もう1つ、テーブル名にが含ま.れている場合[]は、テーブル名を前後に使用します。例:(...私が知っている、私が知っているが、ドットが発生する可能性があります)sp_rename '[Stupid.name]', 'NewName'またはスキーマでsp_rename '[dbo.Stupid.name]', 'NewName'
vacip

55
そして追加する、しないでください偶然にスキーマを入れ'NewName'、フィールドそうでない場合は、あなたのテーブルのようなものを探して終わるかもしれませんdbo.dbo.NewName
Michael Plautz 2017年

4
テーブルの名前を変更するときは、ほぼ確実に、ストアドプロシージャ、ビュー、関数などに存在する可能性があるそのテーブルへの参照の名前も変更する必要があることに注意してください。簡単なGoogle では、これを実行できる多くのツールの1つを見つけることができます。 。または、これらのすべてのオブジェクトで特定の文字列を検索するスクリプトを使用して、それらをALTERステートメントとして貼り付け、検索と置換を行ってから、すべてを実行できます。
MGOwen 2017

2
新しいテーブルを指す古いテーブル名にちなんだ名前のシノニムを作成することもできますCREATE SYNONYM [schema].[synonymName] FOR [schema].[tableName]
Ruskin

新しい名前を角括弧で囲まないでください!それ以外の場合、テーブルの名前には角かっこが含まれます。だから: 'new_table_name'-正解、 '[new_table_name]'-あなたを困らせる
VeganHunter

143

列の名前を変更するには:

sp_rename 'table_name.old_column_name', 'new_column_name' , 'COLUMN';

テーブルの名前を変更するには:

sp_rename 'old_table_name','new_table_name';

デフォルトのdbo以外のスキーマの処理方法については説明していません。
2018

1
@サルここで他のどの回答よりも少なくないですか?テーブルのスキーマを変更する方法を探していました
ベーコンビット

14

上記の回答のように機能するsp_renameを使用する場合は、名前を変更した後に影響を受けるオブジェクトも確認してください。これらのオブジェクトも変更する必要があるため、そのテーブルを参照します。

Pinal Daveのブログで、テーブルの依存関係のコード例をこちらに掲載しました

USE AdventureWorks
GO
SELECT
referencing_schema_name = SCHEMA_NAME(o.SCHEMA_ID),
referencing_object_name = o.name,
referencing_object_type_desc = o.type_desc,
referenced_schema_name,
referenced_object_name = referenced_entity_name,
referenced_object_type_desc = o1.type_desc,
referenced_server_name, referenced_database_name
--,sed.* -- Uncomment for all the columns
FROM
sys.sql_expression_dependencies sed
INNER JOIN
sys.objects o ON sed.referencing_id = o.[object_id]
LEFT OUTER JOIN
sys.objects o1 ON sed.referenced_id = o1.[object_id]
WHERE
referenced_entity_name = 'Customer'

したがって、これらすべての依存オブジェクトも更新する必要があります

または、可能であればいくつかのアドインを使用してください。それらの一部にはオブジェクトの名前を変更する機能があり、すべて依存するオブジェクトも含まれています


11

exec sp_renameLockMatchIDエラーを受信して​​受信した場合は、最初にuse [database]ステートメントを追加すると役立つ場合があります。

私は試した

 exec sp_rename '[database_name].[dbo].[table_name]', 'new_table_name';
 -- Invalid EXECUTE statement using object "Object", method "LockMatchID".

それを修正するために私がしなければならなかったことはそれを次のように書き直すことでした:

use database_name
exec sp_rename '[dbo].[table_name]', 'new_table_name';

10

テーブル名

sp_rename 'db_name.old_table_name', 'new_table_name'

カラム

sp_rename 'db_name.old_table_name.name' 'userName', 'COLUMN'

索引

sp_rename 'db_name.old_table_name.id', 'product_ID', 'INDEX'

静的およびデータ型にも利用可能


2
列の場合、1番目と2番目のパラメーターの間にコンマがありません。sp_rename 'db_name.old_table_name.name'、 'userName'、 'C​​OLUMN'
sebastian.roibu


0

ここで提案されたものからは何も機能しませんでした。

SELECT * 
INTO [acecodetable].['PSCLineReason']
FROM [acecodetable].['15_PSCLineReason'];

多分誰かのために役立つでしょう。

私の場合、新しいスキーマを認識しませんでした。dboも所有者でした。

更新

EXECUTE sp_rename N'[acecodetable].[''TradeAgreementClaim'']', N'TradeAgreementClaim';

私のために働いた。いずれかのテーブルのPKを更新するときに自動的に生成されたスクリプトからそれを見つけました。このようにして、新しいスキーマも認識しました。


0

スキーマが異なるテーブル名を変更するには:

例:dbo.MyTable1をwrk.MyTable2に変更します。

EXEC SP_RENAME 'dbo.MyTable1', 'MyTable2'

ALTER SCHEMA wrk TRANSFER dbo.MyTable2
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.