“L'AFFAIRE” de la déclaration dans les clause “where” dans SQL Server 2008

Je travaille avec une requête qui contient des "CAS" de la déclaration dans les clause "where". Mais SQL Server 2008 est de donner quelques erreurs lors de l'exécution d'elle. Quelqu'un peut-il m'aider avec la requête appropriée? Voici la requête:

SELECT
tl.storenum 'Store #', 
co.ccnum 'FuelFirst Card #', 
co.dtentered 'Date Entered',
CASE st.reasonid 
WHEN 1 THEN 'Active' 
WHEN 2 THEN 'Not Active' 
WHEN 0 THEN st.ccstatustypename 
ELSE 'Unknown' 
END 'Status',
CASE st.ccstatustypename 
WHEN 'Active' THEN ' ' 
WHEN 'Not Active' THEN ' ' 
ELSE st.ccstatustypename 
END 'Reason',
UPPER(REPLACE(REPLACE(co.personentered,'RT\\\\',''),'RACETRAC\\\\','')) 'Person Entered',
co.comments 'Comments or Notes'
FROM 
comments co
INNER JOIN cards cc ON co.ccnum=cc.ccnum
INNER JOIN customerinfo ci ON cc.customerinfoid=ci.customerinfoid
INNER JOIN ccstatustype st ON st.ccstatustypeid=cc.ccstatustypeid
INNER JOIN customerstatus cs ON cs.customerstatuscd=ci.customerstatuscd
INNER JOIN transactionlog tl ON tl.transactionlogid=co.transactionlogid
LEFT JOIN stores s ON s.StoreNum = tl.StoreNum
WHERE 
CASE LEN('TestPerson')
WHEN 0 THEN co.personentered  = co.personentered
ELSE co.personentered LIKE '%TestPerson'
END 
AND cc.ccnum = CASE LEN('TestFFNum')
WHEN 0 THEN cc.ccnum 
ELSE 'TestFFNum' 
END 
AND CASE LEN('2011-01-09 11:56:29.327') 
WHEN 0 THEN co.DTEntered = co.DTEntered 
ELSE 
CASE LEN('2012-01-09 11:56:29.327') 
WHEN 0 THEN co.DTEntered >= '2011-01-09 11:56:29.327' 
ELSE co.DTEntered BETWEEN '2011-01-09 11:56:29.327' AND '2012-01-09 11:56:29.327' 
END 
END
AND tl.storenum < 699 
ORDER BY tl.StoreNum
  • Cas de l'expression, pas de déclaration... (Le cas de l'expression retourne une valeur. L'instruction de cas est utilisée dans des procédures stockées pour l'exécution conditionnelle de code.)
InformationsquelleAutor user1018213 | 2012-01-09