CASE表达式中的SQL错误

时间:2017-08-31 14:24:21

标签: sql sql-server

SELECT DISTINCT
    AM.programid,
    AM.ProjectNumber,
    AM.AppID,
    AM.DateCreated,
    CASE WHEN AM.applicationentryflag = 210
              AND YEAR(App646.Application_Received_Date) = CONVERT(INT,@PY)
         THEN CAST(CONVERT(VARCHAR(10),App646.Application_Received_Date,101) AS DATETIME)
         WHEN AM.applicationentryflag <> 210
              AND YEAR(AM.datecreated) = CONVERT(INT,@PY)
         THEN CAST(CONVERT(VARCHAR(10),AM.datecreated,101) AS DATETIME) 
     END AS [Date_App_Rec]

执行此代码时出现以下错误:

  

CASE规范中至少有一个结果表达式必须是   除NULL常量之外的表达式。

1 个答案:

答案 0 :(得分:1)

当SQL无法推断某个类型时会发生此错误,这意味着您的case个表达式中的所有结果都为null,例如:

SELECT CASE WHEN 1 = 0 THEN NULL ELSE NULL END 

我使用静态date测试了您的Case语句,但似乎没有问题。 (但是,我不确定您为什么要将date转换为varchar(10)然后转回DATETIME

SELECT CAST(CONVERT(VARCHAR(10),'2017-08-31',101) AS DATETIME)
SELECT CAST(CONVERT(VARCHAR(10),'2017-08-31',101) AS DATETIME) 

因此我怀疑错误来自您向我们展示的代码。