Kullandığım SQL
sorgu:
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.
Kullandığım SQL
sorgu:
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:
SQL Server'da bir tabloyu yeniden adlandırmak için şu sp_rename
komutu kullanın:
exec sp_rename 'schema.old_table_name', 'new_table_name'
'NewName'
, sahada aksi takdirde tablo gibi bir şey arıyor sonunda olabilir dbo.dbo.NewName
.
CREATE SYNONYM [schema].[synonymName] FOR [schema].[tableName]
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';
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ı
exec sp_rename
Bir 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';
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
Ne kullanıyorum:
EXEC sp_rename 'MyTable', 'MyTableNewName';
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ı ..
.
kullanın[]
. (... Biliyorum, biliyorum, ama noktalar olabilir) Örneğinsp_rename '[Stupid.name]', 'NewName'
veya şema ilesp_rename '[dbo.Stupid.name]', 'NewName'