Каким-то образом десятилетия назад в нашей базе данных была создана таблица, которая начинается с #
. Он отображается в обозревателе объектов в базе данных приложения, а не в tempdb
. По какой-то причине Azure не будет импортировать базу данных таким образом.
Мы не можем отбросить его, переименовать или взаимодействовать с ним. Я пытался удалить из Object Explorer, Script Drop , Rename из графического интерфейса, и ни один из них не работал.
Мы находимся на 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)'.
Как убить этот объект, чтобы мы могли перенести его в Azure?
sql-server
sql-server-2008-r2
temporary-tables
что это парень
источник
источник
SELECT [name], CONVERT(VARBINARY(128), [name]) FROM sys.tables WHERE [name] = N'#OBSOLETE';
. Благодарю.object_id
из этой таблицы. 2) Перезапустите экземпляр в однопользовательском режиме. 3) подключиться через выделенное соединение администратора. 4) В этой БД попробуйте что-то вродеUPDATE sys.objects$ SET [name] =N'obsolete' WHERE [object_id] = {ye_olde_object_id}; {enter} GO {enter}
. Стоит выстрел ..Ответы:
Данный:
sp_rename
использует имена объектов вместо идентификаторов объектов,#
и интерпретируется как имеющее особое значение и обрабатывается по-другому,Вы должны попробовать отредактировать основную таблицу системного каталога напрямую через Dedicated Admin Console (DAC) :
object_id
из этой таблицы.Подключение через выделенную консоль администратора. Это можно сделать в интерактивном сеансе SQLCMD, выполнив в окне командной строки следующую команду:
или подключитесь напрямую к БД, используя:
В этой БД попробуйте что-то вроде следующего:
Он не выполнит инструкцию, пока вы не введете
GO {enter}
.Пожалуйста, будьте осторожны при прямом редактировании таблиц системного каталога и не слишком задумывайтесь над этим. Это то, что должно быть сделано только если нет абсолютно никакого другого способа решения проблемы (как, например, здесь). Вероятно, есть несколько причин, по которым следует избегать прямого редактирования, но две, которые первоначально приходят на ум:
Вполне вероятно, что прямое редактирование аннулирует ответственность Microsoft за помощь, если у вас возникнут проблемы и у вас есть контракт на поддержку (я не видел условий соглашения (-ов) о поддержке, но мне трудно поверить, что такого языка не будет в там)
@ Пол Рэндал подтвердил в комментарии к моему связанному ответу : «ручное редактирование системной таблицы безвозвратно устанавливает флаг на загрузочной странице базы данных, который помечает вашу базу данных как отредактированную таким образом, и CSS может решить не помогать вы, если у вас впоследствии возникнут проблемы с этой базой данных. "
источник