Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Pouvons-nous écrire une sous-fonction ou une procédure à l'intérieur d'une autre procédure stockée

Je ne recommande pas de le faire car chaque fois qu'il est créé, un nouveau plan d'exécution doit être calculé, mais OUI, cela peut certainement être fait (Tout est possible, mais pas toujours recommandé).

Voici un exemple :

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

Vous recevrez l'avertissement

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.

Vous pouvez contourner cet avertissement en utilisant EXEC('sp_helloworld2') ci-dessus.

Mais si vous appelez EXEC [sp_helloworld] vous obtiendrez les résultats

Hello World
Hello World 2