[MSSQL] Dynamiczny select zwracający dane w procedurze

0

Cześć, normalnie, jeśli chcę zwrócić w procedurze jakieś dane z SELECTA, robię tak:

SELECT @zmienna = pole 
FROM tabela

Ale teraz mam do zbudowania dynamicznego selecta.
Tzn. mam 3 zmienne: startDate, stopDate i EID, które tworzą warunek WHERE.

Jeśli wszystkie te zmienne są nullami, zapytanie jest bez warunku:

SELECT @zmienna = pole
from tabela

jeśli startDate i StopDate mają jakieś wartości, muszę to zawrzeć w warunku

SELECT @zmienna = pole
from tabela
where date>=@startDate and date<=@stopDate

jeśli EID ma jakąś wartość, to muszę ją zawrzeć w warunku w analogiczny sposób.
Jeśli wszystkie 3 zmienne będą miały jakąś wartość, to warunek będzie wyglądał tak:

WHERE where date>=@startDate and date<=@stopDate and eid = @eid

Teraz pytanie, jak mogę takiego selecta zbudować dynamicznie w procedurze składowanej?

Owszem, mógłbym napisać 3 ify i dla każdego z nich oddzielnego selecta, ale to się trochę mija z celem :)

Da się to jakoś zrobić?

0

wystarczy zrobić normalne zapytanie bez ifów i kombinowania

select * from dupa where (p1 is null or p1 = dupa_dupa) and (p2 is null or p2 = dupa_dupa_dupa)

proste?

0
Misiekd napisał(a)

wystarczy zrobić normalne zapytanie bez ifów i kombinowania

select * from dupa where (p1 is null or p1 = dupa_dupa) and (p2 is null or p2 = dupa_dupa_dupa)

proste?

Hmmm, no nie. Tzn. proste, ale nie działa ;) Albo ja tu czegoś nie jarzę

Byłoby ok, ale gdy zmienna jest nullem, to mam nie brać jej pod uwagę w warunku.
Czyli jesli @EID = null to mam wyświetlić wszystkie rekordy, niezależnie od pola EID. Ale jeśli @EID = 5, to mam zwrócić tylko te rekordy, gdzie pole EID = 5

0

nie działa bo sprawdzałeś i pewny jesteś czy nie działa bo tak gdybasz?

jak pi jest null to nie filtrować po p1 a jak <> null to filtrować - tak ma być? Tylko, że p1, p2 to parametry a dupa_* to pola w bazie

0
Misiekd napisał(a)

nie działa bo sprawdzałeś i pewny jesteś czy nie działa bo tak gdybasz?

jak pi jest null to nie filtrować po p1 a jak <> null to filtrować - tak ma być? Tylko, że p1, p2 to parametry a dupa_* to pola w bazie

OK, fakt. Sprawdzałem tak, że p1 i p2 to były pola.
Dzięki!

1 użytkowników online, w tym zalogowanych: 0, gości: 1