在SQL Server 2008中遇到鬼畜错误怎么办

9

当我试图建立关系时,似乎出现了冲突,因为我曾经在数据库中有一张表,但现在已经删除了。虽然这张表在对象资源管理器中不再显示,但错误提示说“发生异常,新名称已被用作‘OBJECT’名称,并且会造成重复。” 那么在哪里可以删除所有与该对象相关的引用,而不仅仅是表名呢?


1
你是否已经设置了同义词?你是否检查过sys.tables表,以确保其中确实有一个条目? - Sage
不,我没有使用任何同义词。 - wootscootinboogie
同义词不是对象——或者至少,它们不会出现在sys.object表中,而是有自己的子系统。当你试图弄清楚是什么在影响你的数据时,这相当恼人... - Philip Kelley
3个回答

9
您可能在数据库中有另一个同名的对象。请执行:
SELECT *
 from sys.objects
 where name = 'YourName'

搜索一下,看看有什么弹出来的。(“对象”包括表、视图、存储过程、函数、默认值和其他很多模糊的东西。)


1
这确实返回了一个具有冲突名称的对象。我该去哪里删除这个坏东西以避免这些错误? - wootscootinboogie
2
它说它是一个表格,但它在数据库中没有与其他表格一起显示,为什么会这样? - wootscootinboogie
你可能没有该表的权限吗?你是否以 DBO 身份登录? - Andomar
这是我在笔记本电脑上的个人SQL Server副本,所以不会。但是我一直在遇到这些奇怪的错误。我删除了表格并尝试制作数据库图表,但该表格仍然出现在要添加到图表中的列表中,这是怎么回事?我运行了一次删除表格的查询成功了,再次运行时失败了(对象不存在)。那么为什么它仍然可以添加到图表中呢? - wootscootinboogie
可能在不同的模式中有相同的表名?它是否列在sys.Tables中?在sys.objects中,它是什么类型(或type_desc)的对象?有时候,你可能会混淆正在使用哪个数据库,甚至是服务器。(不太可能...但我10分钟前刚刚犯了这个错误...) - Philip Kelley
谢谢!您提出的查询帮助我解决了这个问题。 - Sam

4

每次运行一个需要删除表格然后立即将另一个表格重命名为相同名称的脚本时,我都会遇到相同的错误。在另一个论坛上,我看到了这个建议:

Leave the schema out of the new table name when renaming:

sp_RENAME '[schema.OldTableName]' , '[NewTableName]'
我无法解释它为什么有效,但它确实拯救了我的代码。
(感谢:https://social.msdn.microsoft.com/forums/sqlserver/en-US/654678f2-313f-4dad-8bd2-1741b01561f3/find-object-sprename-issue上的Rhomeroo)

0
我使用的解决方案:
前提条件:
我需要将 "dbo.spAddUser" 重命名为 "dbo.sp_AddUser"。
我做了什么:
右键单击 "dbo.spAddUser" -> 修改。
复制所有代码。
右键单击 "dbo.spAddUser" -> 删除。
添加新过程。
粘贴复制的代码并将 "Alter" 更改为 "Create" 并更正过程的名称。
执行。
成功!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接