几十年前,以某种方式在我们的数据库中创建了一个以#
。开头的表。它显示在应用程序数据库下的对象资源管理器中,而不是中tempdb
。由于某些原因,Azure不会像这样导入数据库。
我们无法删除它,对其重命名或与之交互。我试过从对象资源管理器中删除,从GUI中删除脚本,重命名,但它们都没有起作用。
我们正在使用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?
4
尝试在表格名称两边加上括号,是否有相同的反应?
—
rvsc48
如果@ rvsc48的解决方案不起作用,可以尝试使用QUOTENAME函数吗(尽管我认为可以)。 docs.microsoft.com/en-us/sql/t-sql/functions/…–
—
MguerraTorres
方括号:同样的反应。
—
那家伙
请在包含该表的数据库中运行以下查询,并将输出粘贴到问题中:
—
所罗门·鲁兹基
SELECT [name], CONVERT(VARBINARY(128), [name]) FROM sys.tables WHERE [name] = N'#OBSOLETE';
。谢谢。
另一个选择(我没有时间测试):1)获取该
—
所罗门Rutzky
object_id
表的。2)以单用户模式重新启动实例。3)通过专用管理员连接进行连接。4)在该数据库中,尝试类似的操作UPDATE sys.objects$ SET [name] =N'obsolete' WHERE [object_id] = {ye_olde_object_id}; {enter} GO {enter}
。值得一试..