【发布时间】:2017-08-08 22:36:12
【问题描述】:
我正在尝试在 CASE 语句中包含 WHILE 循环,但出现以下错误:
关键字“declare”附近的语法不正确。
'.' 附近的语法不正确。
关键字“ELSE”附近的语法不正确。
我的代码:
SELECT DISTINCT
iu.id AS 'number',
iufv.v AS 'vnumber',
iufv.timet AS 'time',
iufv.loc AS 'loc',
CASE WHEN iufv.timet <= GETDATE() THEN
DECLARE @checktime DATE
SET @checktime = iufv.timet
WHILE iufv.timet <= GETDATE()
BEGIN
SET iufv.timet = DATEADD(DAY, 42, iufv.timet)
PRINT @checktime
End
GO
ELSE
iufv.timet
END AS nexttime
FROM dbo.iu
INNER JOIN dbo.iufv ON iu.active_ufv = iufv.gkey
INNER JOIN dbo.sr ON iu.gkey = sr.applied_to_gkey
WHERE iufv.ts = 'S4' AND iufv.loc = 'MBUL'
预期输出:
number vnumber time loc nexttime
300 v300300 28/12/2016 MBUL 22/03/2017
400 v400400 25/09/2016 MBUL 23/04/2017
500 v500500 18/12/2016 MBUL 23/04/2017
WHILE LOOP的逻辑:
如果时间小于今天的日期,则添加 42 天,
如果它仍然小于今天的日期,再加上 42 天等
直到它大于今天的日期。
【问题讨论】:
-
你想做什么?这不是查询语法,很难弄清楚你的意图。
-
你不能用 case 来控制流,它是一个旨在返回标量值的语句。
标签: sql sql-server while-loop