hej <code> wow... jag kommer nog aldrig förstå varför det där fungerar för i mitt logiska huvud blir det fel.if/case i where?
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!
Sv: if/case i where?
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>Sv: if/case i where?
men jättetack ska du ha!!! :)