Welcome to Sign in | Help

Re: Extragere anumite coloane din rezultatul intors de SP

  •  10-26-2013, 2:09 PM

    Re: Extragere anumite coloane din rezultatul intors de SP

    O solutie poate fi factorizarea codului SQL care este comun celor doua apeluri ale procedurii stocate dbo.MyProc intr-un modul SQL (functie tabelara inline-de preferat, procedura stocata, view) care sa fie apelat de procedura initiala dbo.MyProc (SEELCT 200 coloane) si de o noua procedura dbo.MyProc2 (SELECT 2 coloane).


    Un exemplu: daca procedura initiala dbo.MyProc este de forma urmatoare


    CREATE PROCEDURE dbo.MyProc
    (
    params
    )
    AS
    BEGIN
    SELECT 200 cols
    FROM tabel1 ... tabel 2 ... tabeln
    WHERE ...
    END;
    GO


    atunci se poate crea o functie tabelara inline (preferabila din motive de performanta) astfel


    CREATE FUNCTIOn dbo.MyFuncBase
    (
    params
    )
    RETURNS TABLE
    AS
    RETURN
    SELECT 200 cols
    FROM tabel1 ... tabel 2 ... tabeln;
    GO


    functie care sa fie apelata de procedura stocata initiala


    CREATE PROCEDURE dbo.MyProc
    (
    params
    )
    AS
    BEGIN
    SELECT 200 cols
    FROM dbo.MyFunctBase(params) AS f
    WHERE something ...
    END;
    GO


    si de o noua procedura stocata care va intoarce doar valorile din cele doua coloane care prezinta interes:


    CREATE PROCEDURE dbo.MyProc2
    (
    params
    )
    AS
    BEGIN
    SELECT 2 cols
    FROM dbo.MyFunctBase(params) AS f
    WHERE something else ...
    END;
    GO


    Daca este posibil un asemenea scenariu avantajul (teoretic - trebuiesc realizate teste) este performanta: in cazul apelului EXEC dbo.MyProc2 (care presupune SELECT 2 col2 FROM ) server-ul va avea posibilitatea sa elimine jonctiunile si tabelele/indecsii care nu sunt necesare/i.

    Binenteles, ca in doilea caz ai putea sa apelezi direct functia fara sa mai fie necesar
    apelul procedurilor stocate.
View Complete Thread
Powered by Community Server (Commercial Edition), by Telligent Systems