在SQL Server中,对存储过程进行分组的目的是什么?


35

我必须处理的最困惑的问题之一与存储过程组有关。给定一个存储过程,usp_DoSomethingAwesome我可以通过调用它在另一个组中创建该proc usp_DoSomethingAwesome;2

我在对一些系统生成的插入,更新和删除复制存储过程引起的某些复制问题(发布者:SQL 2000 Ent。,Dist / Sub:2008 R2 Ent)进行故障排除时发现了这一点。

具有这种“分组”能力的目的/思想是什么?

Answers:


32

这就像重载方法。本质上,您可以创建两个或多个版本的存储过程,每个版本执行不同的操作-接受不同数量的参数,对不同的表进行操作,具有不同的输出,等等。

它们被称为编号过程,并且绝对不推荐使用(自2005年以来宣布)。SQL Server 2012仍支持它们,但是某些功能不能很好地使用它们。例如,在“包含的数据库”中将它们视为包含违反行为,并且不会创建任何编号大于1的过程:

消息12829,级别16,状态1,过程blat,第1行
存储过程'dbo.blat'指一组编号的存储过程。编号的存储过程在包含的数据库中不可用。请查阅联机丛书主题“了解包含的数据库”以获取有关包含的数据库的更多信息。


5

对存储过程进行分组的能力(不建议使用)似乎是出于单个(且很愚蠢)的目的而存在:通过单个DROP语句进行批量删除的能力。根据用于创建存储过程的SQL Server 2000 MSDN文档:

分组
如果为过程指定了不同的标识号,则可以使用与现有存储过程相同的名称来创建该过程,从而可以对这些过程进行逻辑分组。具有相同名称的分组过程允许同时删除它们。在同一应用程序中使用的过程通常以这种方式进行分组。例如,与my_app应用程序一起使用的过程可能名为my_proc; 1,my_proc; 2,依此类推。删除my_proc会删除整个组。将过程分组后,无法删除该组中的各个过程。

假设使用相同的基本名称甚至都不允许过载(签名不必是唯一的,并且不需要自动执行路由到特定的“数字”),使用此构造没有任何其他好处。因此,您仍然需要执行时使用“数字”。因此,确定“傻”(对此可能太好了;-)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.