【问题标题】:SQL Schema changed to be "dbo.dbo." after altering table nameSQL 架构更改为“dbo.dbo”。更改表名后
【发布时间】:2014-04-24 07:11:00
【问题描述】:

我试图用一个新的表名来改变一个表。我成功更改了名称,但架构也从“dbo”更改。成为“dbo.dbo.”。当我尝试从新表中选择数据时,它在消息框中显示该表无效,因此我无法对新表执行任何操作。

有谁知道如何将表更改回原始架构?我在 sql server 2008 中使用了 WINSQL。谢谢,

【问题讨论】:

  • 我认为您不能使用 ALTER 更改架构名称。请发布您执行的 ALTER 语句
  • “dbo.dbo”是您数据库上的实际架构吗?
  • @Nicarus 起初我以为 OP 与 ALTER SCHEMA ... TRANSFER 混淆了,这很容易做到,但仔细想想,似乎 OP 只是右键单击并重命名。
  • @swasheck 我完全同意

标签: sql schema winsql


【解决方案1】:

我的猜测是,您实际上只是将表重命名为[dbo.tablename],其完全限定名称是[dbname].[dbo].[dbo.tablename]。当您右键单击以重命名 SSMS 中的表名时会发生这种情况,我想 WinSQL 正在做同样的事情(尽管我不知道当包含 SSMS 时您为什么要使用该工具)。当您右键单击时,它会删除架构名称,这使您认为您需要完全限定新名称,但您不需要。

您应该可以安全地右键单击并将表名重命名为只是新的表名。

不过,可以肯定的是,您可以运行:

select * 
    from sys.schemas
 where name = 'dbo.dbo';

只是为了确认您没有创建新架构。

编辑

为了完整起见,我将合并@billinkc 的评论:

运行此查询以获取表的确切架构:

select 
    s.name as SchemaName, 
        t.name as TableName
from sys.schemas s
    join sys.tables t 
    on s.schema_id = t.schema_id
where t.name = 'tablename'

【讨论】:

  • +1 根据问题中的信息,我认为这可能是最安全的假设,也是唯一对我有意义的假设。
  • 或者,SELECT S.name AS SchemaName, T.name As TableName FROM sys.schemas AS S INNER JOIN sys.tables AS T ON T.object_id = S.object_id WHERE T.name like '%MyTable' 将显示表的精确架构和名称
  • @billinkc 非常正确,但我的怀疑没有达到那个深度(考虑到问题的性质),因此我没有深入研究:)
  • 花语:谢谢你的回答!!根据您的查询,我的架构并没有真正改变。架构仍然是“dbo”。改变的是表名,它将表名显示为“dbo.tablename”而不是“tablename”。
  • 顺便说一句,WINSQL 中没有 GUI 可以更改(至少我找不到)无查询的表。我使用“EXEC sp_rename 'old_Table', 'new_Table_10'”来更改表,导致问题。我还找到了使用查询“EXEC sp_rename '"dbo.new_Table"', 'old_Table_10'" 将表名更改回来而不使用 'dbo' 的解决方案。请注意,您必须为 dbo.table 添加大引号。
猜你喜欢
  • 1970-01-01
  • 2013-08-23
  • 2017-09-15
  • 2017-11-08
  • 2020-01-29
  • 1970-01-01
  • 2013-09-14
  • 1970-01-01
  • 2012-01-10
相关资源
最近更新 更多