StevePMedlem sedan mars 2003772 inlägg Jag har en stored procedure som tar emot 5 parametrar
@VarLastName
@VarFistName
@VarBrick
@VarRole
@VarSpeciality
Dessa skickas genom en asp sida där man kan söka på Förnamn, Efternamn, Brick, Role och Speciality
Nu är det så att i vissa fall fyller man inte i alla fälten och då vill jag självklart bara göra sökningen på de fälten där man fyllt i nåt.
Det är alltså de fem sista raderna som måste ändras.
Ska man använda LIKE clausen? Isf hur gör man det tillsammans med en parameter?
WHERE
SCA.CONTACT_ID = SIEB_SWE_TST..S_CONTACT.ROW_ID AND
SIEB_SWE_TST..S_CON_ADDR.ACTIVE_FLG = 'Y' AND
SIEB_SWE_TST..S_CONTACT.SUPPRESS_EMAIL_FLG = 'N' AND
SIEB_SWE_TST..S_CON_ADDR.X_VERIFICATION_STAT = 'Provider-Approved' AND
SIEB_SWE_TST..S_CONTACT.X_VERIFICATION_STAT = 'Provider-Approved' AND
SIEB_SWE_TST..S_ADDR_PER.X_VERIFICATION_STAT = 'Provider-Approved' AND
SIEB_SWE_TST..S_CONTACT.FST_NAME = @VarFirstName
SIEB_SWE_TST..S_CONTACT.FST_NAME = @VarLastName
SIEB_SWE_TST..S_CONTACT.FST_NAME = @VarBrick
SIEB_SWE_TST..S_CONTACT.FST_NAME = @VarRole
SIEB_SWE_TST..S_CONTACT.FST_NAME = @VarSpeciality
LarsGMedlem sedan dec. 200012 464 inlägg (SIEB_SWE_TST..S_CONTACT.FST_NAME = @VarFirstName
or @VarFirstName is null)
StevePMedlem sedan mars 2003772 inlägg
LarsG skrev:
(SIEB_SWE_TST..S_CONTACT.FST_NAME = @VarFirstName
or @VarFirstName is null)
Får inget resultat tillbaka
WHERE
SCA.CONTACT_ID = SIEB_SWE_TST..S_CONTACT.ROW_ID AND
SIEB_SWE_TST..S_CON_ADDR.ACTIVE_FLG = 'Y' AND
SIEB_SWE_TST..S_CONTACT.SUPPRESS_EMAIL_FLG = 'N' AND
SIEB_SWE_TST..S_CON_ADDR.X_VERIFICATION_STAT = 'Provider-Approved' AND
SIEB_SWE_TST..S_CONTACT.X_VERIFICATION_STAT = 'Provider-Approved' AND
SIEB_SWE_TST..S_ADDR_PER.X_VERIFICATION_STAT = 'Provider-Approved' AND
(SIEB_SWE_TST..S_CONTACT.FST_NAME = @VarFirstName
OR @VarFirstName IS NULL) AND
(SIEB_SWE_TST..S_CONTACT.LAST_NAME = @VarLastName
OR @VarLastName IS NULL) AND
(SIEB_SWE_TST..S_CONTACT.BRICK = @VarBrick
OR @VarBrick IS NULL) AND
(SIEB_SWE_TST..S_CONTACT.ROLE = @VarRole
OR @VarRole IS NULL) AND
(SIEB_SWE_TST..S_CONTACT.SPECIALITY= @VarSpeciality
OR @VarSpeciality IS NULL))
headbugMedlem sedan sep. 2006867 inlägg Jag undrar jag om det verkligen skall vara SIEB_SWE_TST..S_CONTACT.FST_NAME i alla urval?
StevePMedlem sedan mars 2003772 inlägg
headbug skrev:
Jag undrar jag om det verkligen skall vara SIEB_SWE_TST..S_CONTACT.FST_NAME i alla urval?
Jag som skrev fel men det fungerar ändå inte.
Får inga resultat tillbaka om jag enbart söker på ett fält!
Om jag söker på alla fält med rätt information som passar på en person får jag en träff, men jag kan inte enbart söka på t ex "LastName", då får jag inga träffar.
StevePMedlem sedan mars 2003772 inlägg Så här gjorde jag istället.
WHERE
SCA.CONTACT_ID = SIEB_SWE_TST..S_CONTACT.ROW_ID AND
SIEB_SWE_TST..S_CON_ADDR.ACTIVE_FLG = 'Y' AND
SIEB_SWE_TST..S_CONTACT.SUPPRESS_EMAIL_FLG = 'N' AND
SIEB_SWE_TST..S_CON_ADDR.X_VERIFICATION_STAT = 'Provider-Approved' AND
SIEB_SWE_TST..S_CONTACT.X_VERIFICATION_STAT = 'Provider-Approved' AND
SIEB_SWE_TST..S_ADDR_PER.X_VERIFICATION_STAT = 'Provider-Approved' AND
SIEB_SWE_TST..S_CONTACT.FST_NAME LIKE '%' + @VarFirstName + '%' AND
SIEB_SWE_TST..S_CONTACT.LAST_NAME LIKE '%' + @VarLastName + '%')
Då fungerar det att endast söka på ett fält eller flera. Lämnar man nåt fält tomt så tar den med allt i det fältet.
headbugMedlem sedan sep. 2006867 inlägg Ja det fungerar ju om man tycker det är ok att få alla Jonas om man söker på Jon.
Eftersom du ändå har en stored procedure, dvs du kan göra vad du vill och hur som helst, så kan du ju gå igenom alla fält och bygga upp ditt urval allt eftersom du träffar på ett icke-tomt fält. Lite krångligare, lite mer stringent, kanske snyggare?
StevePMedlem sedan mars 2003772 inlägg
headbug skrev:
Ja det fungerar ju om man tycker det är ok att få alla Jonas om man söker på Jon.
Eftersom du ändå har en stored procedure, dvs du kan göra vad du vill och hur som helst, så kan du ju gå igenom alla fält och bygga upp ditt urval allt eftersom du träffar på ett icke-tomt fält. Lite krångligare, lite mer stringent, kanske snyggare?
Jo det är sant, men hur går jag till väga om jag enbart vill söka på exakta namn men samtidigt om jag lämnar ett fält tomt så ekluderar den det fältet i sökningen? Jag vill ju att den enbart söker på de fälten jag skickar med ett värde till.
headbugMedlem sedan sep. 2006867 inlägg Klurade en stund och kom på att du kan ange defaultvärden för dina 5 parametrar.
ALTER PROCEDURE mySP
-- Add the parameters for the stored procedure here
@VarLastName = "%"
@VarFistName = "%"
@VarBrick = "%"
@VarRole = "%"
@VarSpeciality "%"
och så använder du LIKE i frågan, då blir det bara LIKE '%' när du inte anger ett parametervärde och den exakta strängen när du anger något.
i själva frågan så tar du alltså bort %-tecknen, dvs LIKE '%' + @VarLastName + '%' blir LIKE @VarLastName
Lycka till :)
StevePMedlem sedan mars 2003772 inlägg Så här gjorde jag:
WHERE
SCA.CONTACT_ID = SIEB_SWE_TST..S_CONTACT.ROW_ID AND
SIEB_SWE_TST..S_CON_ADDR.ACTIVE_FLG = 'Y' AND
SIEB_SWE_TST..S_CONTACT.SUPPRESS_EMAIL_FLG = 'N' AND
SIEB_SWE_TST..S_CON_ADDR.X_VERIFICATION_STAT = 'Provider-Approved' AND
SIEB_SWE_TST..S_CONTACT.X_VERIFICATION_STAT = 'Provider-Approved' AND
SIEB_SWE_TST..S_ADDR_PER.X_VERIFICATION_STAT = 'Provider-Approved' AND
SIEB_SWE_TST..S_CONTACT.FST_NAME LIKE @VarFirstName AND
SIEB_SWE_TST..S_CONTACT.LAST_NAME LIKE @VarLastName)
Sen i själva ASP sidan så kollade jag bara vad som skrevs in i formuläret.
Om man lämnade fältet tomt så ersätts den tomma strängen med "%", alltså wildcardet och då tar den med allt. Skriver man däremot något i fältet så söker den enbart på det och vill man kunna söka på delar av namnet så skriver man helt enkelt "Anderss%" i fältet så tar den med wildcardet i strängen.
If Request.Form("VarFirstName") = "" then
VarFirstName = "%"
Else
VarFirstName = Request.Form("VarFirstName")
End IF