结果,原本正常的功能却提示:数据库中已存在名为 'sRptRPT01' 的对象 ----注:sRptRPT01是存储过程名字.
关注了一下,SQL Server 2005/2008新增了架构的概念,联想到Oracle数据库"模式"(schema)的概念,猜测到这里所说的"架构"就是指schema,是指特定数据库用户所拥有的全体对象的抽象集合,通常与用户名同名(但SQL Server 2005/2008中可以架构名与用户名不同).
简单做了几个场景的试验,得知:
场景1:
安全性/登录,下面新建登录,hsvip,选上数据库DB_Vip50,默认架构dbo,这样自动有了数据库下的用户;
然后,数据库下架构,创建hsvip架构属于hsvip用户;
最后,修改hsvip用户,修改其默认架构为hsvip(修改了数据库/用户下的默认架构后再看没保存住,则需要安全性/登录下面,用户映射里面改架构)。
这样就配置成兼容SQL2000的模式,主要关注其创建/删除表对于所有者的处理细节,
create table tbl_1 或者 hsvip.tbl_1 都是创建hsvip的表
create table dbo.tbl_1 是创建dbo的表
drop table 可以删除hsvip的表,也可以删除dbo的表,优先删除hsvip的表
场景2:
安全性/登录,下面新建登录,hsvip,选上数据库DB_Vip50,默认架构dbo,这样自动有了数据库下的用户
create table hsvip.tbl_1(col1 varchar(10))
服务器: 消息 2760,级别 16,状态 1,行 1
指定的架构名称 "hsvip" 不存在,或者您没有使用该名称的权限。
create table tbl_1 (col1 varchar(10)) 可以执行,将创建上dbo的表。
可以drop table tbl_1删除
场景3:
安全性/登录,下面新建登录,hsvip,选上数据库DB_Vip50,默认架构dbo,这样自动有了数据库下的用户
然后,数据库下架构,创建hsvip架构属于hsvip用户
create table tbl_1 或者 dbo.tbl_1 都是创建dbo的表
create table hsvip.tbl_1 是创建hsvip的表
drop table tbl_1 可以删除dbo的表
但删除hsvip的一定要加hsvip.否则:
服务器: 消息 3701,级别 11,状态 5,行 1
无法对 表 'tbl_1' 执行 删除,因为它不存在,或者您没有所需的权限。
最终,使用场景1的配置方案,使系统正常使用.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29512902/viewspace-1151745/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29512902/viewspace-1151745/