Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Possiamo scrivere una sottofunzione o una procedura all'interno di un'altra stored procedure

Non consiglio di farlo in quanto ogni volta che viene creato deve essere calcolato un nuovo piano di esecuzione, ma SÌ, sicuramente si può fare (tutto è possibile, ma non sempre consigliato).

Ecco un esempio:

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

Riceverai l'avviso

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.

Puoi ignorare questo avviso utilizzando EXEC('sp_helloworld2') sopra.

Ma se chiami EXEC [sp_helloworld] otterrai i risultati

Hello World
Hello World 2