swa*_*eck 35 sql-server stored-procedures
我不得不处理的最令人困惑的问题之一与存储过程组有关。给定一个存储过程 ,usp_DoSomethingAwesome
我可以通过调用它在另一个组中创建该过程usp_DoSomethingAwesome;2
。
我在解决一些由系统生成的插入、更新和删除复制存储过程引起的复制问题(发布者:SQL 2000 Ent.,Dist/Sub:2008 R2 Ent.)时发现了这一点。
拥有这种“分组”能力的目的/想法是什么?
Aar*_*and 33
这就像重载一个方法。本质上,您可以创建两个或多个版本的存储过程,每个版本都做不同的事情 - 采用不同数量的参数,对不同的表进行操作,具有不同的输出等。
它们被称为编号程序,绝对不推荐使用(自 2005 年宣布)。它们在 SQL Server 2012 中仍受支持,但某些功能不能很好地与它们配合使用。例如,它们被视为包含数据库中的收容失效,并且不会创建任何编号 > 1 的程序:
消息 12829,级别 16,状态 1,过程 blat,第 1 行
存储过程“dbo.blat”是指一组编号的存储过程。编号的存储过程在包含的数据库中不可用。有关包含数据库的详细信息,请参阅联机丛书主题了解包含的数据库。
对存储过程进行分组的能力(已弃用)似乎存在于一个(而且相当愚蠢)的目的:通过单个DROP
语句进行批量删除的能力。根据创建存储过程的 SQL Server 2000 MSDN 文档:
分组
如果一个过程被赋予不同的标识号,则可以使用与现有存储过程相同的名称创建该过程,这允许对过程进行逻辑分组。将具有相同名称的过程分组允许同时删除它们。同一应用程序中使用的过程通常以这种方式分组。例如,与my_app应用程序一起使用的过程可能被命名为my_proc;1、my_proc;2等等。删除my_proc会删除整个组。程序分组后,不能删除组内的单个程序。
鉴于使用相同的基本名称甚至不允许重载(签名不需要是唯一的,并且没有自动执行路由到特定的“数字”),因此使用此构造没有其他好处,因此您仍然需要执行时使用“数字”。因此,“愚蠢”的决定(这可能是太好了;-)。
归档时间: |
|
查看次数: |
4524 次 |
最近记录: |