SQL Server架构和默认架构

时间:2010-09-27 17:25:00

标签: sql-server sql-server-2005 tsql schema

我的数据库中有一个架构定义。除了现在每次我做一个sql语句,我必须提供模式... SELECT * FROM [myschema].table

我使用management studio为我的用户设置了默认架构,并运行了 ALTER USER myUser WITH DEFAULT_SCHEMA [myschema] 在编写没有模式的查询(SELECT * FROM table)

时,我仍然得到无效对象'table'

有没有办法在不必一直指定架构名称的情况下编写SELECT * FROM table

使用SQL Management Studio在SQL 2005上。

3 个答案:

答案 0 :(得分:47)

用户是SA,如果是这样,那么根据documentation SA用户始终默认为dbo架构,它将无效。

  

忽略DEFAULT_SCHEMA的值   如果用户是该成员   sysadmin固定服务器角色。所有   sysadmin固定服务器的成员   role具有dbo的默认架构。

答案 1 :(得分:4)

几个选项:

  1. 您的用户是否列在安全>下;用户(在SSMS中)?检查属性(右键单击名称),看看是否在数据库的上下文中设置了默认架构,而不是实例(这是ALTER USER的内容)设置)。
  2. Create a synonym表示您要参考的表格:

    CREATE SYNONYM table_name  
       FOR [your_db].[your_schema].table_name
    

    ...这将影响在该数据库的上下文中不使用至少两个名称表示法的所有人。 Read more about it here。但它最终与模式相关联。

  3. 检查在“可用数据库”下拉列表中选择的数据库(执行按钮左上角)是否正确。

  4. 指定表(和视图)引用时使用三个名称表示法:

    SELECT * 
      FROM [your_db].[your_schema].table_name
    

答案 2 :(得分:2)

如果您不想使用“完全限定”的SQl名称,则需要避免使用未使用分配的“dbo”默认架构的任何帐户或角色创建表。如果您不打算使用它,为什么还需要更改用户的默认架构?