Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Podemos escrever uma subfunção ou procedimento dentro de outro procedimento armazenado


Não recomendo fazer isso, pois cada vez que é criado um novo plano de execução deve ser calculado, mas SIM, com certeza pode ser feito (Tudo é possível, mas nem sempre recomendado).

Aqui está um exemplo:
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

Você receberá o aviso
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.

Você pode ignorar esse aviso usando EXEC('sp_helloworld2') acima.

Mas se você chamar EXEC [sp_helloworld] você obterá os resultados
Hello World
Hello World 2