当声明时,有人能发现这个案例的问题吗? SQL Server似乎不喜欢它,我无法发现问题!
SELECT CASE @Next_Insp_Date
WHEN @Purpose_ID = 1 THEN DATEADD(m, 6, GETDATE()) AS @Next_Insp_Date
WHEN @Purpose_ID = 2 THEN DATEADD(m, 12, GETDATE()) AS @Next_Insp_Date
ELSE @Next_Insp_Date
END AS @Next_Insp_Date
答案 0 :(得分:4)
案例陈述只能包含一个别名。试试这样:
SELECT CASE
WHEN @Purpose_ID = 1 THEN DATEADD(m, 6, GETDATE())
WHEN @Purpose_ID = 2 THEN DATEADD(m, 12, GETDATE())
ELSE --some other value here
END AS Some_alias_name -- here it is the alias
我不知道@Next_Insp_Date
持有什么,但确定它在错误的地方。在else语句中,您应该具有其他值
如果要从@Next_Insp_Date
检索值,则应该使用else语句。
答案 1 :(得分:3)
SELECT CASE @Purpose_ID
WHEN 1 THEN DATEADD(m, 6, GETDATE())
WHEN 2 THEN DATEADD(m, 12, GETDATE())
ELSE @Next_Insp_Date
END
不确定AS @Next_Insp_Date
的用意是什么,如果您需要,别名属于END
。
答案 2 :(得分:1)
您的列别名是@Next_Insp_Date
,除非您引用它,否则它不能成为{1}}。你可能想把它命名为Next_Insp_Date。
此外,您混合了CASE @val when 1 then
和CASE WHEN @val = 1 then
SELECT CASE
WHEN @Purpose_ID = 1 THEN DATEADD(m, 6, GETDATE())
WHEN @Purpose_ID = 2 THEN DATEADD(m, 12, GETDATE())
ELSE @Next_Insp_Date
END AS [Next_Insp_Date]
答案 3 :(得分:0)
声明@Next_Insp_Date datetime = getdate(); 声明@Purpose_ID int = 3;
SELECT @Next_Insp_Date = CASE WHEN @Purpose_ID = 1那么DATEADD(m,6,GETDATE()) 当@Purpose_ID = 2那么DATEADD(m,12,GETDATE()) ELSE @Next_Insp_Date END print @Next_Insp_Date;