sql >> Database >  >> RDS >> Sqlserver

Kunnen we een subfunctie of procedure schrijven binnen een andere opgeslagen procedure?

Ik raad het niet aan om dit te doen, want elke keer dat het wordt gemaakt, moet er een nieuw uitvoeringsplan worden berekend, maar JA, het kan zeker worden gedaan (alles is mogelijk, maar niet altijd aanbevolen).

Hier is een voorbeeld:

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

U krijgt de waarschuwing

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.

U kunt deze waarschuwing omzeilen door EXEC('sp_helloworld2') hierboven te gebruiken.

Maar als je EXEC [sp_helloworld] belt, krijg je de resultaten

Hello World
Hello World 2


  1. Hoe stel je unieke gebruikersnamen voor aan gebruikers in PHP?

  2. PCI-compliance voor MySQL en MariaDB met ClusterControl

  3. Fout:er zijn niet-vastgelegde transacties

  4. Hoe een webservice aan te roepen vanuit de opgeslagen procedure van SQL Server