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

Kan vi skrive en underfunktion eller procedure inde i en anden lagret procedure

Jeg anbefaler ikke at gøre dette, da hver gang det oprettes skal der beregnes en ny udførelsesplan, men JA, det kan bestemt lade sig gøre (alt er muligt, men ikke altid anbefalet).

Her er et eksempel:

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

Du får advarslen

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.

Du kan omgå denne advarsel ved at bruge EXEC('sp_helloworld2') ovenfor.

Men hvis du ringer til EXEC [sp_helloworld], vil du få resultaterne

Hello World
Hello World 2


  1. Tilføj dage til en dato i SQLite

  2. Tegn med bytesekvens 0x9d i kodningen 'WIN1252' har ingen ækvivalent i kodningen 'UTF8'

  3. Hvad virtuelle filstater gør, og ikke gør, fortæller dig om I/O-forsinkelse

  4. Vis alle forekomster, der skal registreres dynamisk med en lytter