Search virker ikke efter hensigten i sp
Jeg har en sp, hvor jeg søger på felter i en tabel, som bare ikke virker (den kommer ikke med nogen rækker, selvom jeg ved, der findes en rækker, der matcher kriteriet).Min sp:
ALTER PROCEDURE [dbo].[XXTest]
@ageFrom AS INTEGER = null,
@ageTo AS INTEGER = null,
@genderId AS INTEGER = null,
@searchString AS NVARCHAR(MAX) = null
AS
BEGIN
SELECT dbo.User_Profile.genderId, dbo.User_Profile.age, dbo.User_Profile.occupation, dbo.aspnet_Users.UserName
FROM dbo.User_Profile LEFT OUTER JOIN
dbo.aspnet_Users ON dbo.User_Profile.UserId = dbo.aspnet_Users.UserId
WHERE
(((@ageFrom IS NULL) OR (dbo.User_Profile.age >= COALESCE (@ageFrom, dbo.User_Profile.age))) AND
((@ageTo IS NULL) OR (dbo.User_Profile.age <= COALESCE (@ageTo, dbo.User_Profile.age)))) AND
((@genderId IS NULL) OR (dbo.User_Profile.genderId = COALESCE (@genderId, dbo.User_Profile.genderId))) AND
((@searchString IS NULL) OR (dbo.User_Profile.occupation = COALESCE ('%' + @searchString + '%', dbo.User_Profile.occupation)))
END
Jeg har 2 rækker i tabellen:
genderId.....age......occupation.....UserName
1............45.......Klaphat........Test1
2............48.......Torsk..........Test2
Nu forsøger jeg så i parameterne at sætte ind:
ageFrom = 45,
ageTo = 48,
genderId = 1,
searchString = N'Torsk'
Og jeg får ingen rækker ud.
Hvis jeg fjerner linjen får jeg det ud jeg skal have....:
AND
((@searchString IS NULL) OR (dbo.User_Profile.occupation = COALESCE ('%' + @searchString + '%', dbo.User_Profile.occupation)))
Det jeg vil:
At hvis ageFrom og/eller ageTo er indtastet noget - skal den hente de rækker som svarer til parameteren...hvis de er null, skal den tage alle rækker og gå videre til næste where nemlig genderId
hvis genderId er sat til f.eks. 1 skal den sortere igen udfra de rækker der er fra ovennævnte og kun tage de rækker der er genderId = 1 - ellers skal den tage alle rækker hvis genderId er null og gå videre til næste søgning.....
hvis occupation er sat til Torsk - skal den tage alle rækker med torsk - hvis occupation er sat til null, skal den tage alle rækker med fra occupation....
Nogen, der kan fortælle mig, hvor jeg går fejl i min SQL where clause?
mvh
simsen :-)