Sql server 2008 执行前缀为dbo的存储过程是否重要?
有人建议我在执行存储过程时,应该包括prefox dbo,例如 exec dbo.“存储过程的名称”Sql server 2008 执行前缀为dbo的存储过程是否重要?,sql-server-2008,Sql Server 2008,有人建议我在执行存储过程时,应该包括prefox dbo,例如 exec dbo.“存储过程的名称” 我不加前缀有关系吗 我应该什么时候使用前缀 在SQL中,最好是显式的,并在引用对象时包含默认模式[dbo],因为稍后您可能希望定义自己的模式,其中存储了同名的进程或表。 e、 g dbo不是前缀,而是架构 模式类似于组,您可以创建一个名为Production的模式,让您的过程类似于Production.AddStock,而另一个过程类似于Sales.GetCustomer,并让过程类似于Sal
- 我不加前缀有关系吗
- 我应该什么时候使用前缀
dbo不是前缀,而是架构 模式类似于组,您可以创建一个名为Production的模式,让您的过程类似于Production.AddStock,而另一个过程类似于Sales.GetCustomer,并让过程类似于Sales.GetCustomer 它们特别适合管理权限。 此链接可以帮助您:
如果存储过程位于
dbo
模式中,则应该说:
EXEC dbo.name_of_procedure;
用于指定架构的优点:
- 您知道您正在调用dbo.procedure,即使还有其他schema.procedure
- 查询引擎不必首先检查类似命名对象的默认模式
- 您不会得到不可预测的结果(例如,如果您的模式中有一个,但您的意思是
)dbo
- 如果每个人都一致地使用模式,则查询计划重用的机会会更好
- 您可以额外键入四个字符
还有什么是不明确的?当你说“模式”时,你是什么意思?你可以创建自己的模式,以便更好地对对象进行逻辑分组。例如,您可能有一个用于内部业务数据的模式,另一个用于外部业务数据,不同的模式可以使用不同的数据库用户分配不同的权限。这是一个很好的链接,解释了SQL Server 2008中的模式分离:Awesome NPix。现在理解模式是什么很好。我假设它会被称为安全模式。你看过我在你的另一个问题上发布的链接了吗?我认为你对“前缀”一词的定义可能与我的不同。在我的家乡,这是一个前缀,我从未听过有人提出其他建议。如果你把它称为结构中的东西(不是用实际术语,例如模式),你会怎么称呼它?考虑到它是由2、3或4部分组成的名称的可选部分?而且我认为你还没有回答这个问题。您已经解释了模式是什么以及它们的用途,但没有解释为什么在调用过程时应该使用它们。@Diego-感谢您对模式的解释。作为新手,了解术语及其含义是很好的。如果您从对象浏览器中将对象拖过来,您甚至不必键入模式,它会自动将其提供给您。所以不使用它的理由就更少了。@HLGEM关于
SELECT*
,我得到了相同的论据:“但是键入列太多了!”是的,是的。现在,在对象资源管理器中展开表,并将“列”节点拖到查询窗口上。“噢!神奇!”@Aaron Bertrand-我假设如果数据库被授予dbo
权限,那么它下面的存储过程将继承模式。塔尔说得对吗?原因是,当我创建存储过程时,即CREATE procedure Name\u of_procedure
,我没有指定前缀dbo
No,我不确定您如何授予数据库dbo权限?无论如何,如果您说createprocedure x
,它将以用户的默认模式创建。在某些情况下是dbo,在某些情况下不是。为什么您仍然希望在不指定模式的情况下继续创建过程?如果您希望它生活在dbo中,并且希望它生活在dbo中,为什么不显式地指定dbo呢?
EXEC dbo.name_of_procedure;