2017-08-29 229 views
-2

我收到此錯誤,我找不到原因。sql server 2012:關鍵字'else'附近的語法不正確

case when FormFields.fieldtype like '%date%'   
    then 'not' + fieldname + ' is null and (convert(datetime,' 
     + fieldname +',103) < ' 
     + coalesce(str(FormFields.MinDate),'1/1/1900') + ')' 
     + ' or (convert(datetime,' + fieldname +',103) > ' 
     + coalesce(str(FormFields.MaxDate), '1/1/2200') + ')' 
     + 
else  
     'not '+ fieldname + ' is null and (convert(float,'+ fieldname+') <' 
     + coalesce(str(FormFields.MinValue),'-99999999') 
     + ' or convert(float,'+ fieldname+') >' 
     + coalesce(str(FormFields.MaxValue),'99999999') +')' 
     + 
end 

前面的代碼沒有任何錯誤:

'not '+ fieldname + ' is null and (convert(float,'+ fieldname+') <' 
    + coalesce(str(FormFields.MinValue),'-99999999') 
    + ' or convert(float,'+ fieldname+') >' 
    + coalesce(str(FormFields.MaxValue),'99999999') +')' 
    + 

我只是想補充另一種情況

+3

也許在'then'行結尾的超級+符號? –

+1

結尾 –

+0

還有另外一個建築字符串代碼的一部分,這就是爲什麼有額外的'+' – aggicd

回答

1

您的查詢2個額外的+,1在THEN部分的結束,另一個在ELSE部分的末尾。如果您需要將CASE表達式與另一個字符串結合使用,請在END之後使用+。請嘗試以下方法:

case when FormFields.fieldtype like '%date%'   
    then 'not' + fieldname + ' is null and (convert(datetime,' 
     + fieldname +',103) < ' 
     + coalesce(str(FormFields.MinDate),'1/1/1900') + ')' 
     + ' or (convert(datetime,' + fieldname +',103) > ' 
     + coalesce(str(FormFields.MaxDate), '1/1/2200') + ')' 

else  
     'not '+ fieldname + ' is null and (convert(float,'+ fieldname+') <' 
     + coalesce(str(FormFields.MinValue),'-99999999') 
     + ' or convert(float,'+ fieldname+') >' 
     + coalesce(str(FormFields.MaxValue),'99999999') +')' 

end 
+ 'Any string after CASE expression' 
+0

問題解決了,但現在我收到「無效的列名'MinDate'。」和「無效的列名'MaxDate'」。「 – aggicd

+1

@aggicd所以這意味着你提供了不正確的列名,正如你在正確的查詢中,你只使用'MinValue'和'MaxValue',也許根本沒有'MinDate'和'MaxDate'? –

+0

有,但他們是日期時間列 – aggicd

相關問題