首先了解一下在数据库中什么是架构(Schema),按照微软的说法"数据库架构是一个独立于数据库用户的非重复命名空间,您可以将架构视为对象的容器",具体说明可以参考:http://technet.microsoft.com/zh-cn/library/ms190387.aspx。其实对于我们搞C#的来说很好理解。架构就像C#中的命名空间,每一个类只能处在一个命名空间,不能即属于A命名空间又属于B命名空间。但数据库架构与命名空间有点不同的是,命名空间可以属于另一个命名空间下,而架构不行。
即然在数据库中有架构这个概念,那么我们在访问表的时候,严格来说,应该都需要加上架构名,例如sql语句:
select * from 表名
严格来说,应该是
select * from 架构名.表名
那为什么我们没有加架构名也能访问到表呢?这是因为有默认架构名的原因,如果我们没有给对象加架构名,那么数据库就会使用默认架构名,一般默认架构名为dbo。
回到正题,我们要如何修改对象的架构名呢?可以使用系统存储过程sp_changeobjectowner
sp_changeobjectowner说明如下:
作用:更改当前数据库中对象的所有者
语法:
sp_changeobjectowner [ @objname = ] 'object' , [ @newowner = ] 'owner'
示例:
比如要修改dbo.table1的架构为newschema,sql语句如下:
sp_changeobjectowner 'dbo.table1','newschema'