如果我执行带有前缀dbo的存储过程是否重要?

时间:2012-02-23 19:27:10

标签: sql-server-2008

我在执行存储过程时被告知,我应该包含prefox dbo,例如

exec dbo.'name_of_stored_procedure'

  • 如果我不包含前缀,这是否重要?
  • 我什么时候应该使用前缀?

3 个答案:

答案 0 :(得分:8)

如果您的存储过程在dbo架构中,那么您应该说:

EXEC dbo.name_of_procedure;

指定架构的优点:

  • 你知道你正在调用dbo.procedure,即使还有some_other_schema.procedure
  • 查询引擎不必首先检查您的默认架构以查找类似命名的对象
  • 您没有获得不可预测的结果(例如,如果您的架构中有一个但意味着 dbo
  • 如果每个人都一直使用架构
  • ,那么您有更好的机会重新使用查询计划

指定架构的缺点:

  • 您输入了额外的四个字符

明白还有什么可以买到你?

答案 1 :(得分:2)

在SQL中,最好是显式并在引用对象时包含默认模式[dbo],因为稍后您可能希望定义自己的模式,这些模式存储了具有相同名称的过程或表。 e.g。

dbo.sp_GetNames
Cities.sp_GetNames
Countries.sp_GetNames

答案 2 :(得分:2)

dbo不是前缀,是架构 模式就像组一样,你可以创建一个名为Production的模式,让你的程序像Production.AddStock和另一个名为Sales的程序,并有像Sales.GetCustomer这样的过程

它们特别适合管理权限。 此链接可以帮助您: http://msdn.microsoft.com/en-us/library/ms190387.aspx