Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 执行前缀为dbo的存储过程是否重要?_Sql Server 2008 - Fatal编程技术网

Sql server 2008 执行前缀为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

有人建议我在执行存储过程时,应该包括prefox dbo,例如

exec dbo.“存储过程的名称”

  • 我不加前缀有关系吗
  • 我应该什么时候使用前缀

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


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;