Entah bagaimana, beberapa dekade yang lalu, sebuah tabel dibuat di basis data kami yang dimulai dengan a #
. Itu muncul di Object Explorer di bawah database aplikasi, bukan di tempdb
. Untuk beberapa alasan, Azure tidak akan mengimpor basis data seperti ini.
Kami tidak dapat menjatuhkannya, mengganti nama, atau berinteraksi dengannya. Saya sudah mencoba Hapus dari Object Explorer, Drop Script , Ganti nama dari GUI dan tidak ada yang bekerja.
Kami menggunakan SQL 2008 R2.
drop table [*app*].[dbo]."#OBSOLETE";
Database name '*app*' ignored, referencing object in tempdb.
Msg 3701, Level 11, State 5, Line 1
Cannot drop the table '#OBSOLETE', because it does not exist or you do not
have permission.
exec sp_rename "dbo.#OBSOLETE", "dbo.obsolete"
Msg 15225, Level 11, State 1, Procedure sp_rename, Line 338
No item by the name of 'dbo.#OBSOLETE' could be found in the current database '*app*', given that @itemtype was input as '(null)'.
Bagaimana cara kita membunuh objek ini sehingga kita bisa memigrasi ini ke Azure?
SELECT [name], CONVERT(VARBINARY(128), [name]) FROM sys.tables WHERE [name] = N'#OBSOLETE';
. Terima kasih.object_id
tabel itu. 2) Mulai ulang instance dalam mode pengguna tunggal. 3) terhubung melalui Koneksi Admin Khusus. 4) Dalam DB itu, coba sesuatu sepertiUPDATE sys.objects$ SET [name] =N'obsolete' WHERE [object_id] = {ye_olde_object_id}; {enter} GO {enter}
. Layak dicoba ..Jawaban:
Diberikan:
sp_rename
menggunakan nama objek, bukan ID objek,#
dan yang ditafsirkan memiliki makna khusus dan ditangani secara berbeda,Anda harus mencoba mengedit tabel katalog sistem yang mendasarinya secara langsung melalui koneksi Dedicated Admin Console (DAC) :
object_id
tabel itu.Terhubung melalui koneksi Konsol Admin Khusus. Anda dapat melakukan ini dalam sesi interaktif SQLCMD dengan menjalankan yang berikut di jendela Prompt Perintah:
atau, hubungkan langsung ke DB menggunakan:
Di DB itu, coba sesuatu seperti berikut:
Itu tidak akan menjalankan pernyataan sampai Anda memasukkan
GO {enter}
.Harap berhati-hati ketika langsung mengedit tabel katalog sistem, dan jangan terlalu nyaman dengan ide untuk melakukannya. Ini adalah sesuatu yang harus dilakukan hanya jika sama sekali tidak ada cara lain untuk memperbaiki masalah (seperti kasus di sini). Mungkin ada beberapa alasan untuk menghindari penyuntingan langsung, tetapi dua yang awalnya muncul di pikiran adalah:
Kemungkinan besar melakukan penyuntingan langsung mengosongkan tanggung jawab Microsoft untuk membantu Anda jika Anda mengalami masalah dan memiliki kontrak dukungan (Saya belum melihat ketentuan-ketentuan perjanjian Dukungan, tetapi saya sulit percaya bahwa bahasa seperti itu tidak akan ada dalam sana)
@ Paul Randal dikonfirmasi dalam komentar pada jawaban terkait saya: "secara manual mengedit tabel sistem secara tidak dapat dibatalkan menetapkan bendera di halaman boot database yang menandai database Anda telah diedit dengan cara ini, dan CSS mungkin memutuskan untuk tidak membantu Anda jika Anda kemudian memiliki masalah dengan database itu. "
sumber