Welcome to Sign in | Help
in Search

Procedura stocata...

Last post 09-20-2007, 3:04 PM by ThePuiu. 4 replies.
Sort Posts: Previous Next
  •  09-20-2007, 10:44 AM 2714

    Procedura stocata...

    Salut, trebuie sa fac o procedura stocata la care as vrea sa pot sa-i trimit ca si parametru sau intreaga sintaxa sql a interogarii sau daca nu se poate asa, conditia din WHERE. Adica ceva de genul:

    PROCEDURE [dbo].[Listare]
    @SQL
    nvarchar[500]
    AS
    BEGIN
    SET NOCOUNT ON;
    SQL
    END

    Se poate face asa ceva? Am cautat pe net, dar cred ca nu stiu cum sa formulez intrebarea...
    Multumesc!

  •  09-20-2007, 11:13 AM 2715 in reply to 2714

    Re: Procedura stocata...

    poti cu: 

    exec('select 123')

     

    sau cu

     

    exec sp_executesql @sql

    pt. a refolosi planurile de executie a query-urilor

     vezi BOL pt. mai multe detalii, si ai grija la securitate sql-ul dinamic e f. periculos din punctul de vederea al securitatii. Iti recomand sa citesti in detaliu despre problemele de securitate care pot aparea.
     

  •  09-20-2007, 11:36 AM 2717 in reply to 2714

    Re: Procedura stocata...

    Se poate, dar n-are niciun rost. Vezi:
    http://www.sommarskog.se/dynamic_sql.html#Common_cases

    Răzvan 


  •  09-20-2007, 1:46 PM 2718 in reply to 2717

    Re: Procedura stocata...

    am incercat cu exec si face ce vreau eu, dar din pacate am constatat ca nu pot sa construiesc un raport crystal pe o SP facuta asa...se pare ca trebuie sa fie definite in clar campurile ce vor fi in raport. Da o eroare: Must declare the scalar variable "@SQL".  Eu trebuie de fapt sa fac un select intre doua tabele si care sa aiba in cadrul lui WHERE o sintaxa diferita in functie de unele setari pe care le face userul. Din aceasta cauza ma gindeam ca mai simplu ar fi sa transmit tot stringul spre SP. Ce se poate face in cazul asta? EX:

    ALTER PROCEDURE [dbo].[ListareNote]
    @SQL
    varchar(500)
    AS
    BEGIN
    DECLARE
    @sqlL nvarchar(4000)
    SELECT @sqlL = 'SELECT PARTENERI.NUME,PARTENERI.LOCALITATEA,NOTE.DATA,NOTE.ID,NOTE.STATUS,NOTE.NUMECLIENT FROM PARTENERI INNER JOIN NOTE ON PARTENERI.ID = NOTE.ID_PARTENER WHERE ' + @SQL
    EXEC (@sqlL)
    END

  •  09-20-2007, 3:04 PM 2719 in reply to 2718

    Re: Procedura stocata...

    am reusit sa prostesc crystalul pina la urma si am facut ce trebuia! Multumesc pt raspunsuri!
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems