1、设置Schema
Q: 如何通过设置,使得在通过在创建表(不是用sql语句)的时候,指定schema,现在默认的schema是dbo,我想换成别的schema,比如:test.
A:需要修改(创建表的)用户帐户的默认 schema
alter user username WITH DEFAULT_SCHEMA=test
Q: 我设置了创建表的用户帐户的默认 schema 为 test,可通过 management studio 的create table的图形界面来创建表的是,仍然是放在dbo下。
A: 当数据库用户对应的登陆帐户属于 SYSADMIN 服务器角色成员,则在数据库中,该用户帐户所创建的数据库对象的所有者为 DBO,架构也为 DBO,会忽略该用户帐户的默认架构。
Q: 强!你说的是重哪里查到的?另外一个问题,现在出现了test.table1,dbo.table2,为什么我在写sql的时候不添加schema仍然可以访问 table2,例如: select * from table2,而不用写成select * from dbo.table2
A: 当数据库用户对应的登陆帐户属于 SYSADMIN 服务器角色成员,则在数据库中,该用户帐户所创建的数据库对象的所有者为 DBO,架构也为 DBO,会忽略该用户帐户的默认架构。(这个是原来遇到问题时自己总结的)
当用户访问数据库对象时,如果没有显式的指定对象的架构,系统会依次检查:当前数据库的 SYS 架构、用户的默认架构(如果是在一个存储过程中嵌套调用的另一个存储过程时没有显示指定架构,则会检查外层存储过程的架构)、当前数据库的 DBO 架构下是否存在该对象。(这个是从联机丛书上抄的)
Q: good,那这样的话,除非给dbo schema这是权限,否是,任何User都可以访问dbo下的对象,且不用带上dbo.table 这样的写法