私が使用したSQL
クエリは次のとおりです。
ALTER TABLE oldtable RENAME TO newtable;
しかし、それは私に誤りを与えます。
サーバー:メッセージ156、レベル15、状態1、行1
キーワード 'TO'付近の構文が正しくありません。
SQL Serverのテーブルの名前を変更するには、 sp_rename
コマンドを使用します。
exec sp_rename 'schema.old_table_name', 'new_table_name'
列名を変更するには
sp_rename 'table_name.old_column_name', 'new_column_name' , 'COLUMN';
テーブルの名前を変更するには
sp_rename 'old_table_name','new_table_name';
上記の回答のように機能する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'
したがって、これらすべての従属オブジェクトも更新する必要があります。
あるいは、可能であればアドインを使用します。それらのいくつかはオブジェクトの名前を変更する機能を持ち、すべては依存オブジェクトも依存します。
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';
これは私が使っているものです:
EXEC sp_rename 'MyTable', 'MyTableNewName';
テーブル名
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'
統計やデータ型にも利用可能
ここで提案されたものからは何も動作しませんでした。
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