Welcome to Sign in | Help
in Search

search cu multi parametrii optionali

Last post 12-09-2008, 4:02 PM by liviu.costea. 11 replies.
Sort Posts: Previous Next
  •  12-09-2008, 12:05 PM 6343

    search cu multi parametrii optionali

    De obicei cand am de facut un search cu multi parametrii optionali incerc sa folosesc sql dinamic ca sa nu ajung la constructii de genul

    "@Param1 IS NULL OR Coloana1 = @Param1" (in constructii de tipul asta nu poate face index seek).

    Cand folosesc sql dinamic ajung sa am instructiuni IF si ELSE in codul procedurii.

    Foloseste cineva alta abordare? Cred ca s-ar mai putea genera sql direct din cod.

    Intrebarea e generala nu tine de versiunea serverului nici de framework, dar nu ma intereseaza solutiile cu linq sau entity framework pentru ca din pacate nu le pot folosi inca Smile

    Multumesc

  •  12-09-2008, 12:27 PM 6344 in reply to 6343

    Re: search cu multi parametrii optionali

  •  12-09-2008, 12:29 PM 6345 in reply to 6343

    Re: search cu multi parametrii optionali

    liviu.costea:

    De obicei cand am de facut un search cu multi parametrii optionali incerc sa folosesc sql dinamic ca sa nu ajung la constructii de genul

    "@Param1 IS NULL OR Coloana1 = @Param1" (in constructii de tipul asta nu poate face index seek).

    Cand folosesc sql dinamic ajung sa am instructiuni IF si ELSE in codul procedurii.

    Foloseste cineva alta abordare? Cred ca s-ar mai putea genera sql direct din cod.

    Intrebarea e generala nu tine de versiunea serverului nici de framework, dar nu ma intereseaza solutiile cu linq sau entity framework pentru ca din pacate nu le pot folosi inca Smile

    Multumesc


    Normal ca se poate genera din cod ... cu conditia sa ai grija la sql injection ...Ce limbaj folosesti ?


    Ignat Andrei
    http://serviciipeweb.ro/iafblog
  •  12-09-2008, 12:54 PM 6346 in reply to 6345

    Re: search cu multi parametrii optionali

    C#.

    Eu as vrea sa stiu ce folosesc altii in conditiile astea. Tu, de exemplu ce faci cand trebuie sa scrii query-uri din astea?

  •  12-09-2008, 1:23 PM 6347 in reply to 6346

    Re: search cu multi parametrii optionali

    Uite un exemplu bun, dat de Adam Machanic in "Expert SQL Server 2005 development":

    CREATE PROCEDURE GetEmployeeData

    @EmployeeId INT = NULL,

    @NationalIdNumber NVARCHAR(15) = NULL

    AS

    BEGIN

    SET NOCOUNT ON

    DECLARE @sql NVARCHAR(MAX)

    SET @sql = '' +

    'SELECT ' +

    'ContactId, ' +

    'LoginId, ' +

    'Title ' +

    'FROM HumanResources.Employee ' +

    'WHERE 1=1 ' +

    CASE

    WHEN @EmployeeId IS NULL THEN ''

    ELSE 'AND EmployeeId = @EmployeeId '

    END +

    CASE

    WHEN @NationalIdNumber IS NULL THEN ''

    ELSE 'AND NationalIdNumber = @NationalIdNumber '

    END

    EXEC sp_executesql

    @sql,

    N'@EmployeeId INT, @NationalIdNumber NVARCHAR(60)',

    @EmployeeId,

    @NationalIdNumber

    END

    Atentie la "sp_executesql" - este parametrizat. Nu ai probleme nici cu "SQL injection" nici cu parametrii optionali.

  •  12-09-2008, 1:29 PM 6348 in reply to 6346

    Re: search cu multi parametrii optionali

    liviu.costea:

    C#.

    Eu as vrea sa stiu ce folosesc altii in conditiile astea. Tu, de exemplu ce faci cand trebuie sa scrii query-uri din astea?


    Liviu - eu ma mulez dupa sef si conditii.
    De obicei, prefer sa le pun in cod decit in procedura stocata - dar, cind am de facut managementul la 30 de aplicatii de VB6 cu Servere diferite, prefer sa le pun in BD ( e mai usor sa faci upgrade la BD decit la aplicatia VB ...)
    Acum , pentru C# ai clickonce ... si posibilitatea de a avea upgrade-uri relativ usoare.


    Ignat Andrei
    http://serviciipeweb.ro/iafblog
  •  12-09-2008, 1:30 PM 6349 in reply to 6347

    Re: search cu multi parametrii optionali


    Cand folosesc sql dinamic ajung sa am instructiuni IF si ELSE in codul procedurii.

    Diana:

    CASE

    WHEN @EmployeeId IS NULL THEN ''

    ELSE 'AND EmployeeId = @EmployeeId '

    END

    Ai inlocui if cu case  Stick out tongue

    Ignat Andrei
    http://serviciipeweb.ro/iafblog
  •  12-09-2008, 2:02 PM 6350 in reply to 6349

    Re: search cu multi parametrii optionali

    ignatandrei:

    Cand folosesc sql dinamic ajung sa am instructiuni IF si ELSE in codul procedurii.

    Diana:

    CASE

    WHEN @EmployeeId IS NULL THEN ''

    ELSE 'AND EmployeeId = @EmployeeId '

    END


    Ai inlocui if cu case  Stick out tongue

    Si ce daca? Stick out tongue Nu cred ca sunt probleme cu aceasta "formulare". Procedura e usor de intretinut (mai usor decat daca as genera SQL in codul de C#), "sigura", iar performanta pare sa fie OK.

  •  12-09-2008, 2:08 PM 6351 in reply to 6350

    Re: search cu multi parametrii optionali

    Diana:

     Procedura e usor de intretinut (mai usor decat daca as genera SQL in codul de C#), "sigura", iar performanta pare sa fie OK.


    Ca e usor de intretinut - e pe depinde ...In general, vin din lumea OO - unde persista intrebarea :ce e o SP si la ce foloseste ea?
    Ca e sigura - ma rog ...
    Performanta ... se poate

    Problema era ca liviu stia de abordarea asta ... si cauta una noua
    Si imi cer scuze daca te-am suparat cumva ... sper ca nu

    Ignat Andrei
    http://serviciipeweb.ro/iafblog
  •  12-09-2008, 2:26 PM 6352 in reply to 6351

    Re: search cu multi parametrii optionali

    Nu m-ai suparat...Smile. Mie imi place sa tin TSQL separat de C# - din motive de intretinere, performanta, optimizare si "security". Iar "CASE" e mai putin "verbos", mai "compact" decat "IF".
  •  12-09-2008, 2:59 PM 6353 in reply to 6352

    Re: search cu multi parametrii optionali

    Sunt deacord cu ce zice Diana- procedura cu parametri default


    Secolul XXI ori va fi religios ori nu va fi deloc
  •  12-09-2008, 4:02 PM 6355 in reply to 6352

    Re: search cu multi parametrii optionali

    Si eu prefer sa fac generarea sql-ului in procedura stocata si nu in cod pentru ca e mai usor de intretinut.
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems