我想检查SQL Server(2000/05/08)是否具有编写嵌套存储过程的能力,我的意思是-在另一个存储过程中编写子函数/过程。不调用另一个SP。

我为什么要考虑它-我的SP之一是重复的代码行,并且仅特定于此SP。因此,如果我们具有此嵌套的SP功能,则可以在主SP中声明另一个子/本地过程,并且将所有重复的行放在那。我可以在我的主SP中调用该本地sp。我记得Oracle SP中提供了此功能。

如果SQL Server也具有此功能,请有人可以解释一下它的更多详细信息或提供我可以在其中找到文档的链接。

提前致谢

最佳答案

我不建议您这样做,因为每次创建它时都必须计算一个新的执行计划,但是可以,它绝对可以做到(一切皆有可能,但并不总是建议)。

这是一个例子:

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

您会收到警告
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.

您可以使用上面的EXEC('sp_helloworld2')绕过此警告。

但是,如果您致电EXEC [sp_helloworld],您将获得结果
Hello World
Hello World 2

关于sql - 我们可以在另一个存储过程中编写子函数或过程吗,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/495700/

10-13 02:53