当我在SQL Server中编写sql语句时,如何从表名中删除dbo前缀?

时间:2009-04-20 18:46:47

标签: sql-server

我的架构中的所有表都有一个dbo前缀。现在在我的sql语句中,我不喜欢一直使用dbo.tablename。任何变通方法或配置更改?

6 个答案:

答案 0 :(得分:31)

其实你应该留下那些dbo。语句因为SQL会更快,因为优化器不必查找模式

请查看此链接Performance Impact of Procedure Calls without Owner Qualification

答案 1 :(得分:6)

离开dbo实际上是有益的。前缀到位 - 毕竟,在SQL Server中,您可以使用具有相同表名的多个模式(“dbo。”thingie),例如: dbo.MyTable,joe.MyTable,frank.MyTable。

如果然后发出SELECT(字段列表)FROM MyTable,SQL Server必须首先弄清楚你真正意味着哪个“MyTable”表 - >这需要花费时间,直接指定你想要的“dbo.MyTable”将节省你的时间。

好的,单个查询不是很多 - 但SELECT查询是QUITE频繁的,而且它们都加起来了!

马克

答案 2 :(得分:2)

就像这样,如果您的所有表都在dbo架构中

use mydatabase
go
select * from mytable

如果您有多个数据库,也可以这样做:

select * from mydatabase..mytable

答案 3 :(得分:1)

赏金问题并不完全是原始问题。

  

目前的答案中没有足够的细节。

     

没有一个答案实际上解决了如何删除的问题   dbo前缀或将其更改为其他内容。

dbo是架构。您无法从表中删除架构。你可以改变它。有很多例子。这是一个:How do I move a table into a schema in T-SQL

答案 4 :(得分:0)

不幸的是,如果您想充分利用Microsoft SQL Server,则需要将dbo.放在很多地方。创建视图时,可以选择使其成为 schema-bound 视图,这意味着将在编译时检查对象名称,并且只要视图存在,就不能删除其引用的对象。 (您必须先显式删除该视图。)如果视图是架构绑定的,它也可以成为索引视图。较新的MSSQL版本还支持架构绑定的存储过程,这还有其他优点。

如果需要,可以创建除dbo之外的其他模式。但是您仍然需要直接引用对象,例如myschema.mytable,而不仅仅是mytable

您还需要dbo.用于用户定义的功能。

我个人想告诉MSSQL我不打算使用模式,我对表(至少在给定数据库中)的单个顶级名称空间的经典SQL方式感到满意,并且可以如果没有另外指定,请假设dbo.。但是我还没有找到办法。

答案 5 :(得分:-3)

我认为您连接的用户必须属于dbo架构,然后您不必输入前缀,它将从用户所属的架构中推断出它。