aleborgMedlem sedan jan. 20013 341 inlägg Jag har plötsligt börjat få ett mystiskt felmeddelande på en SQL-sats som har fungerat länge:
SELECT
ID,
ProductID,
AccountNamesID,
UserID,
ServerID,
Article,
[Name],
Description,
Period,
Qty,
Price,
Created,
Ended
FROM
ServiceItems
WHERE
(Period > 0)
AND
(UserID = @userid)
AND
(DATEDIFF(mm, Created, @month) % Period = 0)
AND
(Ended IS NULL OR Ended > GETDATE())
Jag har lyckats utesluta felet till följande del:
DATEDIFF(mm, Created, @month) % Period = 0
@month är '2007-08-01', Created är '2005-08-11' och Period är 12 i raden(som jag trots allt får fram men felmeddelandet uppstår ändå!?), jag vet att nästa rad som skulle ha tagits fram har Period=0, men den filtrerar jag bort i SQL-frågan.
Vad är fel?
aleborgMedlem sedan jan. 20013 341 inlägg Efter lite tester verkar det som om (DATEDIFF(mm, Created, @month) % Period = 0) kollas före (Period > 0), har testat med att sätta paranteser på olika sätt men utan resultat :(
Testa:
SELECT
ID,
ProductID,
AccountNamesID,
UserID,
ServerID,
Article,
[Name],
Description,
Period,
Qty,
Price,
Created,
Ended
FROM
ServiceItems
WHERE
(DATEDIFF(mm, Created, @month) % Period = 0)
AND
ID in(SELECT AI.ID FROM ServiceItems AS AI WHERE AI.Period > 0 AND (AI.UserID = @userid)
AND AI.Ended IS NULL OR AI.Ended > GETDATE())
aleborgMedlem sedan jan. 20013 341 inlägg Fungerade inte heller tyvärr.
LarsGMedlem sedan dec. 200012 464 inlägg AND DATEDIFF(mm, Created, @month) % case when Period = 0 then 1 else period end = 0
aleborgMedlem sedan jan. 20013 341 inlägg Tack LarsG, nu funkar det. Hur kommer det sig att DATEDIFF kollas före Period>0, borde den inte gå i rätt ordning?
LarsGMedlem sedan dec. 200012 464 inlägg Det kan man aldrig veta. Det är inte definierat i vilken ordning olika villkor testas.