SQL Server'da bir tablo nasıl yeniden adlandırılır?


370

Kullandığım SQLsorgu:

ALTER TABLE oldtable RENAME TO newtable;

Ama bana bir hata veriyor.

Sunucu: Msg 156, Seviye 15, Durum 1, Satır 1
'TO' anahtar kelimesinin yanında yanlış sözdizimi.

Yanıtlar:


683

SQL Server'da bir tabloyu yeniden adlandırmak için şu sp_renamekomutu kullanın:

exec sp_rename 'schema.old_table_name', 'new_table_name'

7
Bir şey daha var: Tablo adlarından herhangi birinin içinde bir tane varsa , tablo adının etrafında .kullanın []. (... Biliyorum, biliyorum, ama noktalar olabilir) Örneğin sp_rename '[Stupid.name]', 'NewName'veya şema ilesp_rename '[dbo.Stupid.name]', 'NewName'
vacip

55
Ve eklemek için, yok yanlışlıkla şemayı koymak 'NewName', sahada aksi takdirde tablo gibi bir şey arıyor sonunda olabilir dbo.dbo.NewName.
Michael Plautz

4
Bir tabloyu yeniden adlandırırken, neredeyse kesinlikle bu tabloya depolanmış yordamlarda, görünümlerde, işlevlerde vb. Olabilecek tüm başvuruları yeniden adlandırmak istediğinizi unutmayın. Hızlı bir google, bunu sizin için yapabilen birçok araçtan birini bulabilir. . Veya tüm bu nesnelerde belirli bir dizeyi bulan bir komut dosyası kullanabilir ve bunları ALTER deyimleri olarak yapıştırabilir, bul ve değiştir işlemini gerçekleştirebilir, ardından hepsini çalıştırabilirsiniz.
MGOwen

2
Ayrıca, yeni tabloya işaret eden eski tablo adının adını taşıyan bir eş anlamlı da oluşturabilirsinizCREATE SYNONYM [schema].[synonymName] FOR [schema].[tableName]
Ruskin

köşeli parantez içine yeni bir isim koymayın! aksi takdirde tablonun adında köşeli ayraçlar olacaktır. Yani: 'new_table_name' - doğru, '[new_table_name]' - başınızı belaya
sokacak

143

Bir sütunu yeniden adlandırmak için:

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

Bir tabloyu yeniden adlandırmak için:

sp_rename 'old_table_name','new_table_name';

Varsayılan dbo dışındaki şemaların nasıl işleneceğini açıklamaz.
Sal

1
@Sal Buradaki diğer cevaplardan daha az değil mi? Bir tablonun şemasını nasıl değiştireceğinizi mi arıyordunuz ?
Bacon Bits

14

Yukarıdaki yanıtlarda olduğu gibi çalışan sp_rename kullanırken, yeniden adlandırdıktan sonra hangi nesnelerin etkilendiğini de kontrol edin, bu tabloya bakın, çünkü bunları da değiştirmeniz gerekir

Burada Pinal Dave'in blogunda tablo bağımlılıkları için bir kod örneği aldım

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'

Bu nedenle, tüm bu bağımlı nesnelerin de güncellenmesi gerekiyor

Ya da yapabiliyorsanız bazı eklentiler kullanın, bazılarında nesneyi yeniden adlandırma özelliği var ve hepsi de nesnelere bağımlı


11

exec sp_renameBir LockMatchID hatası alıp denerseniz , önce bir kullanım [veritabanı] ifadesi eklemek yardımcı olabilir:

denedim

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

Bunu düzeltmek için ne yapmam gerekiyordu:

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

10

Tablo ismi

sp_rename 'db_name.old_table_name', 'new_table_name'

sütun

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

indeks

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

statik ve veri türleri için de kullanılabilir


2
Sütun için birinci ve ikinci parametreler arasında virgül eksik. Bu olmalı: sp_rename 'db_name.old_table_name.name', 'kullanıcıAdı', 'KOLUMN'
sebastian.roibu


0

Burada önerilenlerden hiçbir şey işe yaramadı. Yani verileri yeni tabloya aldık

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

belki birisi için faydalı olacaktır ..

Benim durumumda yeni şema tanımadı da dbo sahibi oldu ..

GÜNCELLEME

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

Benim için çalıştı. Tablolardan biri için PK güncelleştirilirken otomatik olarak oluşturulan komut dosyasından buldum. Bu şekilde yeni şemayı da tanıdı ..


0

Bir tablo adını farklı bir şema ile değiştirmek için:

Örnek: dbo.MyTable1 öğesini wrk.MyTable2 olarak değiştirin

EXEC SP_RENAME 'dbo.MyTable1', 'MyTable2'

ALTER SCHEMA wrk TRANSFER dbo.MyTable2
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.