我想检查SQL Server(2000/05/08)是否具有编写嵌套存储过程的能力,我的意思是 - 在另一个存储过程中编写子函数/过程.不要叫另一个SP.
为什么我在考虑它是 - 我的一个SP有重复的代码行,并且只针对此SP.So如果我们有这个嵌套的SP功能,那么我可以在我的主SP中声明另一个子/本地程序把所有重复的行放在那里.我可以在我的主SP中调用本地sp.我记得Oracle SP中提供了这样的功能.
如果SQL服务器也具有此功能,有人可以解释一些有关它的更多详细信息或提供我可以找到文档的链接.
在此先感谢Sai
我不建议这样做,因为每次创建时都必须计算新的执行计划,但是肯定可以完成(一切皆有可能,但并不总是建议).
这是一个例子:
CREATE PROC [dbo].[sp_helloworld]
AS
BEGIN
SELECT 'Hello World'
DECLARE @sSQL VARCHAR(1000)
SET @sSQL = 'CREATE PROC [dbo].[sp_helloworld2]
AS
BEGIN
SELECT ''Hello World 2''
END'
EXEC (@sSQL)
EXEC [sp_helloworld2];
DROP PROC [sp_helloworld2];
END
Run Code Online (Sandbox Code Playgroud)
你会得到警告
The module 'sp_helloworld' depends on the missing object 'sp_helloworld2'.
The module will still be created; however, it cannot run successfully until
the object exists.
Run Code Online (Sandbox Code Playgroud)
您可以使用上面的EXEC('sp_helloworld2')绕过此警告.
但如果你打电话给EXEC [sp_helloworld],你会得到结果
Hello World
Hello World 2
Run Code Online (Sandbox Code Playgroud)
它没有这个功能.除了阻止嵌套SPROC中的代码从其他地方调用之外,很难看出这样的功能会带来什么样的真正好处.