在sql 2005中更改表模式

时间:2010-03-02 19:54:39

标签: sql-server-2005

我有一个sql 2005数据库,我有一个名为dbo.AgencyProfile的表 但是,我想删除dbo前缀。我怎么能做到这一点?

4 个答案:

答案 0 :(得分:1)

为什么需要? SQL将dbo模式中的所有对象保留为默认值。您不需要在SQL语句中使用模式 - SELECT * FROM AgencyProfile会很好,因为SQL将在dbo模式中搜索AgencyProfile

您可以将对象放入自己的模式中,但是您需要使用模式名称对它们进行限定。

答案 1 :(得分:1)

您无法删除前缀/架构,但可以通过重新创建表来更改它:

CREATE TABLE [whatever].[AgencyProfile](
        [AgencyId] [int] NOT NULL DEFAULT
        [AgencyName] [nvarchar](256),
        [Field 2] [nvarchar](256),
        [Field 3] [uniqueidentifier] NOT NULL 
etc....

答案 2 :(得分:1)

架构是对象的组成部分:您只能从引用对象的代码中删除它

在编译时会遇到性能损失,因为它必须解析对象所在的模式。

SELECT * FROM foobarSELECT * FROM dbo.foobar不一样,需要检查一下架构foobar是什么。也就是说,它会在转到[domain\user].foobar之前查找dbo.foobar {1}}。

来自"Execution Plan Caching and Reuse"

...
     

将新SQL语句与现有,未使用的语句匹配的算法   缓存中的执行计划需要   所有对象引用都是完全的   合格。例如,第一个   这些SELECT语句不匹配   现有计划,第二个   匹配:

SELECT * FROM Contact

SELECT * FROM Person.Contact

对于NT连接,您无法指定默认架构,因此无法避免此

如果你想在视图中使用SCHEMABINDING等,那么你必须对模式进行限定。

远远超过“代码混乱”

编辑:在其他地方发表评论后......

您运行的create table没有架构,因此您有一个对象[domain\user].AgencyProfile。当然dbo.AgencyProfile不存在

您需要运行'ALTER AUTHORIZATION ON [domain\user].AgencyProfile TO dbo'来替换sp_changeobjectowner

答案 3 :(得分:0)

您无法删除前缀/架构,但正如Andy所指出的,如果您在数据库中没有其他架构,则不必使用它。