繁体   English   中英

SQL Server架构和默认架构

[英]SQL server schema and default schema

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

我使用管理工作室为我的用户设置了默认架构,并且还运行了ALTER USER myUser WITH DEFAULT_SCHEMA [myschema] ,在编写没有架构的查询时,我仍然得到无效对象'table'(SELECT * FROM table)

有没有办法编写SELECT * FROM table而不必一直指定模式名称?

它是在SQL 2005上使用SQL Management Studio。

用户是SA ,如果是这样,它将无法工作,根据文档 SA用户总是默认为dbo架构。

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

几种选择:

  1. 您的用户是否列在安全>用户(SSMS)下? 检查属性 (右键单击名称),查看是否在数据库的上下文中设置了默认架构 ,而不是实例(这是ALTER USER设置的实例)。
  2. 为要引用的表创建同义词

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

    ...这将影响在该数据库的上下文中不使用至少两个名称表示法的每个人。 在这里阅读更多相关信息 但它最终与架构相关联。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM