web-dev-qa-db-ja.com

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

私が使用したSQLクエリは次のとおりです。

ALTER TABLE oldtable RENAME TO newtable;

しかし、それは私に誤りを与えます。

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

345
Switch

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

exec sp_rename 'schema.old_table_name', 'new_table_name'
630
Jeff Hornby

列名を変更するには

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

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

sp_rename 'old_table_name','new_table_name';
132
Ravi Kumar

上記の回答のように機能する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'

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

あるいは、可能であればアドインを使用します。それらのいくつかはオブジェクトの名前を変更する機能を持ち、すべては依存オブジェクトも依存します。

13
user3260414

exec sp_renameを試してLockMatchIDエラーを受け取った場合は、まず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';
9
Stian

これは私が使っているものです:

EXEC sp_rename 'MyTable', 'MyTableNewName';
6

テーブル名

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'

統計やデータ型にも利用可能

5
budamivardi

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

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

多分誰かに役立つでしょう..

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

更新

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

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

別のスキーマでテーブル名を変更するには:

例:dbo.Table1をwork.My Table2に変更します

EXEC SP_RENAME 'dbo.MyTable1', 'MyTable2'

ALTER SCHEMA wrk TRANSFER dbo.MyTable2
0
live-love