Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Können wir eine Unterfunktion oder Prozedur in eine andere gespeicherte Prozedur schreiben?

Ich empfehle dies nicht, da jedes Mal, wenn es erstellt wird, ein neuer Ausführungsplan berechnet werden muss, aber JA, es ist definitiv möglich (alles ist möglich, aber nicht immer empfohlen).

Hier ist ein Beispiel:

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

Sie erhalten die Warnung

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.

Sie können diese Warnung umgehen, indem Sie oben EXEC('sp_helloworld2') verwenden.

Aber wenn Sie EXEC [sp_helloworld] aufrufen, erhalten Sie die Ergebnisse

Hello World
Hello World 2