if/case i where?
hej
jag har en hyfsat avancerad fråga där jag söker ut ett antal adresser från en tabell baserat på bland annat dessas intressen. en adress kan vara kopplad till flera intressen samtidigt. urvalet gör jag genom att skicka in en xml-sträng i sp'n och helt enkelt hämta ut alla adresser som har de markerade intressena.
här kommer problemet: om man inte kryssat i något intresse i sökfunktionen ska alla hämtas oavsett intressen.
hittills har jag löst det genom att i sp'n ha en if-sats runt hela frågan, alltså:
If (@XmlInterests Is Null) Begin 'Gör sökningen utan xml-frågan End Else Begin 'Gör sökningen MED xml-frågan, typ: DECLARE @XmlHandle1 INT EXEC sp_xml_preparedocument @XmlHandle1 OUTPUT, @XmlInterests SELECT blabla WHERE blabla AND Con.ContactID IN ( SELECT DISTINCT CI.ContactId FROM OPENXML (@XmlHandle1, '/ROOT/I', 1) WITH ( NIID integer '.' ) INNER JOIN ContactInterests AS CI ON NIID = CI.InterestID ) EXEC sp_xml_removedocument @XmlHandle1 End
fungerar men det är inte snyggt att ha samma fråga två gånger.
tänk nu att jag lägger till en till typ av intressen som kan vara inga/en/många. om jag fortsätter i samma stil så blir det if-satser till 4 olika frågor. det är väl också "ok" men när jag lägger till mitt tredje urval på kategori som funkar likadant så blir if-satsen 9 olika frågor och helt ohållbar...
helst skulle jag vilja göra typ:
SELECT blabla WHERE blabla IF not xml1 is null BEGIN 'kör hela xml-grejen: AND Con.ContactID IN (blabla) END IF not xml2 is null ...osv
som om det skulle funka... har provat med case också...
Hjäääälp!
Svara
Sv: if/case i where?
<code>
SELECT blabla
WHERE blabla
and (@XmlInterests Is Null
or Con.ContactID IN (
SELECT DISTINCT CI.ContactId
FROM OPENXML (@XmlHandle1, '/ROOT/I', 1)
WITH
(
NIID integer '.'
)
INNER JOIN ContactInterests AS CI
ON NIID = CI.InterestID
))
</code>
Svara
Sv: if/case i where?
wow... jag kommer nog aldrig förstå varför det där fungerar för i mitt logiska huvud blir det fel.
men jättetack ska du ha!!! :)
Svara