我有一个sql 2005数据库,我有一个名为dbo.AgencyProfile的表 但是,我想删除dbo前缀。我怎么能做到这一点?
答案 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 foobar
与SELECT * 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所指出的,如果您在数据库中没有其他架构,则不必使用它。