sql >> データベース >  >> RDS >> Sqlserver

別のストアド プロシージャ内にサブ関数またはプロシージャを記述できますか

    作成されるたびに新しい実行計画を計算する必要があるため、これを行うことはお勧めしませんが、はい、間違いなく実行できます (すべて可能ですが、常に推奨されるわけではありません)。

    以下に例を示します:

    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
    


    1. Laravel DB::selectクエリでページ付けを使用する方法

    2. PHP、PostgresはRETURNINGの使用を支援します

    3. Oracle.DataaccessエラーORA-06502:PL / SQL:数値または値のエラー:文字列バッファが小さすぎます

    4. MySQLWorkbenchで外部キーを追加するときのMySQLエラー1064