---
title: "Dynamisk sökning via Stored Procedure"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/154834-dynamisk-sökning-via-stored-procedure"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "SteveP"
published: "2006-12-13T11:31:19.000Z"
updated: "2006-12-13T13:56:42.000Z"
replies: 11
views: 592
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/154834-dynamisk-sökning-via-stored-procedure"
---

# Dynamisk sökning via Stored Procedure

## #1 — SteveP, 2006-12-13T11:31Z

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
```

Permalänk: https://www.webforum.nu/p/154834

## #2 — LarsG, 2006-12-13T11:46Z

```
(SIEB_SWE_TST..S_CONTACT.FST_NAME = @VarFirstName
 or @VarFirstName is null)
```

Permalänk: https://www.webforum.nu/p/1909636

## #3 — SteveP, 2006-12-13T11:55Z

> **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))
```

Permalänk: https://www.webforum.nu/p/1909639

## #4 — headbug, 2006-12-13T12:24Z

Jag undrar jag om det verkligen skall vara SIEB_SWE_TST..S_CONTACT.FST_NAME i alla urval?

Permalänk: https://www.webforum.nu/p/1909647

## #5 — SteveP, 2006-12-13T12:32Z

> **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.

Permalänk: https://www.webforum.nu/p/1909650

## #6 — SteveP, 2006-12-13T12:43Z

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.

Permalänk: https://www.webforum.nu/p/1909655

## #7 — headbug, 2006-12-13T12:52Z

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?

Permalänk: https://www.webforum.nu/p/1909657

## #8 — SteveP, 2006-12-13T13:14Z

> **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.

Permalänk: https://www.webforum.nu/p/1909664

## #9 — headbug, 2006-12-13T13:28Z

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 :)

Permalänk: https://www.webforum.nu/p/1909668

## #10 — SteveP, 2006-12-13T13:31Z

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
```

Permalänk: https://www.webforum.nu/p/1909670

## #11 — headbug, 2006-12-13T13:46Z

Lysande!

Permalänk: https://www.webforum.nu/p/1909674

## #12 — SteveP, 2006-12-13T13:56Z

Tack för hjälpen!

Permalänk: https://www.webforum.nu/p/1909675

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/154834-dynamisk-sökning-via-stored-procedure
