Jawaban:
Untuk mengganti nama tabel di SQL Server, gunakan sp_rename
perintah:
exec sp_rename 'schema.old_table_name', 'new_table_name'
'NewName'
bidang, jika tidak meja Anda mungkin terlihat seperti dbo.dbo.NewName
.
CREATE SYNONYM [schema].[synonymName] FOR [schema].[tableName]
Untuk mengganti nama kolom:
sp_rename 'table_name.old_column_name', 'new_column_name' , 'COLUMN';
Untuk mengganti nama tabel:
sp_rename 'old_table_name','new_table_name';
Saat menggunakan sp_rename yang berfungsi seperti pada jawaban di atas, periksa juga objek mana yang terpengaruh setelah penamaan ulang, yang merujuk pada tabel itu, karena Anda perlu mengubahnya juga
Saya mengambil contoh kode untuk dependensi tabel di blog Pinal Dave di sini
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'
Jadi, semua objek dependen ini perlu diperbarui juga
Atau gunakan beberapa tambahan jika Anda bisa, beberapa dari mereka memiliki fitur untuk mengubah nama objek, dan semua tergantung, objek juga
Jika Anda mencoba exec sp_rename
dan menerima kesalahan LockMatchID maka mungkin membantu menambahkan pernyataan penggunaan [database] terlebih dahulu:
Saya mencoba
exec sp_rename '[database_name].[dbo].[table_name]', 'new_table_name';
-- Invalid EXECUTE statement using object "Object", method "LockMatchID".
Apa yang harus saya lakukan untuk memperbaikinya adalah menulis ulang untuk:
use database_name
exec sp_rename '[dbo].[table_name]', 'new_table_name';
Nama Tabel
sp_rename 'db_name.old_table_name', 'new_table_name'
Kolom
sp_rename 'db_name.old_table_name.name' 'userName', 'COLUMN'
Indeks
sp_rename 'db_name.old_table_name.id', 'product_ID', 'INDEX'
juga tersedia untuk statika dan tipe data
Inilah yang saya gunakan:
EXEC sp_rename 'MyTable', 'MyTableNewName';
Tidak ada yang berhasil dari yang diusulkan di sini .. Jadi hanya menengok data ke dalam tabel baru
SELECT *
INTO [acecodetable].['PSCLineReason']
FROM [acecodetable].['15_PSCLineReason'];
mungkin akan bermanfaat bagi seseorang ..
Dalam kasus saya itu tidak mengenali skema baru juga dbo adalah pemiliknya ..
MEMPERBARUI
EXECUTE sp_rename N'[acecodetable].[''TradeAgreementClaim'']', N'TradeAgreementClaim';
Bekerja untukku. Saya menemukannya dari skrip yang dihasilkan secara otomatis ketika memperbarui PK untuk salah satu tabel. Dengan cara ini ia mengenali skema baru juga ..
Untuk mengubah nama tabel dengan skema berbeda:
Contoh: Ubah dbo.MyTable1 menjadi wrk.MyTable2
EXEC SP_RENAME 'dbo.MyTable1', 'MyTable2'
ALTER SCHEMA wrk TRANSFER dbo.MyTable2
.
di dalamnya, gunakan di[]
sekitar nama tabel. (Saya tahu, saya tahu, tetapi titik-titik dapat terjadi ...) Misalnyasp_rename '[Stupid.name]', 'NewName'
atau dengan skemasp_rename '[dbo.Stupid.name]', 'NewName'