Avatar billede simsen Mester
18. august 2010 - 12:31 Der er 3 kommentarer og
1 løsning

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 :-)
Avatar billede bennytordrup Nybegynder
18. august 2010 - 12:39 #1
prøv med LIKE i stedet for = i linien
Avatar billede Syska Mester
18. august 2010 - 12:44 #2
Du skal bruge LIKE og ikke =

mvh
Avatar billede Syska Mester
18. august 2010 - 12:46 #3
argh, crap, der var du hurtigere :-)

mvh
Avatar billede bennytordrup Nybegynder
18. august 2010 - 12:51 #4
:-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester