当前位置:  开发笔记 > 数据库 > 正文

我们可以在另一个存储过程中编写子函数或过程

如何解决《我们可以在另一个存储过程中编写子函数或过程》经验,为你挑选了1个好方法。

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

为什么我在考虑它是 - 我的一个SP有重复的代码行,并且只针对此SP.So如果我们有这个嵌套的SP功能,那么我可以在我的主SP中声明另一个子/本地程序把所有重复的行放在那里.我可以在我的主SP中调用本地sp.我记得Oracle SP中提供了这样的功能.

如果SQL服务器也具有此功能,有人可以解释一些有关它的更多详细信息或提供我可以找到文档的链接.

在此先感谢Sai



1> John..:

我不建议这样做,因为每次创建时都必须计算新的执行计划,但是肯定可以完成(一切皆有可能,但并不总是建议).

这是一个例子:

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的可能性。..当然还有所有的红色警告。我认为在实际的生产环境中使用这种方法毫无意义。
推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有