我必须处理的最困惑的问题之一与存储过程组有关。给定一个存储过程usp_DoSomethingAwesome,我可以通过将其命名为usp_DoSomethingAwesome;2在另一个组中创建该proc。 Ent。)是系统生成的某些Insert,Update和Delete复制存储过程引起的。

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

#1 楼

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

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


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


#2 楼

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


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


使用这种结构没有额外的好处,因为使用相同的基本名称甚至都不允许重载(签名不必是唯一的,并且不需要自动执行路由到特定的“数字”),因此执行时仍然需要使用“数字”。因此,确定“傻”(这可能对它太好了;-)。