【问题标题】:How can I remove this type of tables name [somepreffix].table如何删除这种类型的表名 [someprefix].table
【发布时间】:2020-03-13 14:03:35
【问题描述】:

我有一个组织的数据库,其中所有表如下所示: EMPRE01.table1 EMPRE01.table2 等等

如果我输入这个查询:SELECT * FROM sysobjects WHERE xtype='U' 我会得到这个结果作为表名:table1,table2 但如果我尝试这个查询:SELECT * FROM table1 它不会工作 只有当我这样输入时:SELECT * FROM EMPRE01.table1

如何将数据库转换为“正常”模式?

【问题讨论】:

  • 您可以通过use <db_name> 为您的会话指定默认数据库。但最好使用完全限定名称。

标签: sql sql-server smss


【解决方案1】:

当您键入查询时:

SELECT * FROM table1

它将搜索为dbo.table1。因为dbo 是默认模式。您需要明确说明架构名称:

所以,

SELECT * FROM EMPRE01.table1

注意:这假设查询正在使用相同的数据库。

【讨论】:

  • 您混淆了 dbo 和默认模式 - 这没有帮助。当对象不是模式限定的时,总是首先使用默认模式来查找对象。不要假设 dbo 是默认模式。你的最后一句话同样令人困惑。您无需“更改”默认架构 - 您只需使用适当的架构限定对象名称。
  • 根据您的建议,我使用此查询将表更改为 dbo。而且效果很好。 '''SELECT 'ALTER SCHEMA dbo TRANSFER [' + SysSchemas.Name + '].[' + DbObjects.Name + '];' FROM sys.Objects DbObjects INNER JOIN sys.Schemas SysSchemas ON DbObjects.schema_id = SysSchemas.schema_id WHERE SysSchemas.Name 'dbo' AND (DbObjects.Type IN ('U', 'P', 'V'))'' '
猜你喜欢
  • 1970-01-01
  • 2022-06-10
  • 1970-01-01
  • 2015-07-02
  • 2012-07-29
  • 2018-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多