SQL Server中的某些表需要[user]。[table]而其他表没有,为什么会这样,我可以强制它吗?

时间:2010-10-08 09:13:03

标签: sql-server

正如标题所示,我很困惑为什么我的数据库中的某些表会因为你做的事情而失败;

SELECT * FROM [user].[table]

然而在另一张桌子上它运作良好。

我正在测试一些代码,这些代码最终会出现在服务器上,如果你不使用[user]那就会哭。[table]所以我真的想在我的机器上强行执行此操作。

有人可以解释为什么会发生这种情况,并且可能会告诉我如何修复它。

更多信息

以下是我尝试使用[user]。[table]而不仅仅是[table]运行查询时得到的消息。

  

[Microsoft] [ODBC SQL Server   驱动程序] [SQL Server]无效的对象名称   'usr.tbl'

2 个答案:

答案 0 :(得分:4)

“user”位是表所属的架构

因此,您可以在同一个数据库中拥有dbo.tableuser.table

默认情况下,SELECT * FROM table通常会查找dbo.table。但是,如果登录/用户具有不同的默认架构,则它将查找thatschema.table

修复它:

  • 您可以使用ALTER SCHEMA .. TRANSFER..修复当前设置
  • 正在进行中,确保每个表引用都有关于CREATE,ALTER,SELECT等的正确架构

另见"User-Schema Separation" on MSDN

答案 1 :(得分:1)

您所指的[user]实际上是一种称为架构的东西。每个用户都有一个默认架构,这意味着当您以该用户身份登录时,您可以引用默认架构中没有架构前缀的表。解决此问题的一种方法是确保没有用户具有表所在的默认架构。基本上,您可以创建一个emptry架构,并将其用作所有用户的默认架构。 转到 YourDatabase - > Security->用户,然后查看属性(通过右键单击)更改用户的默认架构。