0

我在 SQL 中循环时遇到问题。我想循环一个开始日期,直到他到达结束日期。

他们对我说不要使用游标,所以我找到了一个这样的例子:

with mycte as
(
select cast('2007-01-01' as datetime) DateValue
union all
select DateValue + 1
from mycte 
where DateValue + 1 < '2030-12-31'
)
select * from mcte

这行得通,所以我将变量更改为我的情况:

with View_Solidnet_Training as
(
select StartingDate as DateValue
union all
insert into OBJ_Availability values(34, DateValue + 1, 'AM', 2, 'Test')
select DateValue + 1
from View_Solidnet_Training
where DateValue + 1 < EndingDate
)
select * from View_Solidnet_Training

但我收到以下错误:

消息 156,级别 15,状态 1,第 5 行关键字“插入”附近的语法不正确。消息 128,级别 15,状态 1,第 5 行 在此上下文中不允许使用名称“DateValue”。有效表达式是常量、常量表达式和(在某些情况下)变量。不允许使用列名。消息 102,级别 15,状态 1,第 9 行 ') 附近的语法不正确

4

2 回答 2

0

试试这个(未经测试):

with mycte as
(
  select 34, cast('2007-01-01' as datetime) DateValue, 'AM', 2, 'Test' 
  union all
  select 34, DateValue + 1, 'AM', 2, 'Test'
    from mycte 
   where DateValue + 1 < '2030-12-31'
)
insert into OBJ_Availability (select * from mcte)
于 2013-04-09T07:16:50.150 回答
0

请试试:

with View_Solidnet_Training as
(
    select @StartingDate as DateValue

    union all

    select DateValue + 1
    from View_Solidnet_Training
    where DateValue + 1 < @EndingDate
)
insert into OBJ_Availability
select 34, DateValue + 1, 'AM', 2, 'Test' from View_Solidnet_Training

提供@StartingDate@EndingDate两个日期时间变量,并且表格OBJ_Availability应按 CTE 的选定顺序仅包含 5 列。

于 2013-04-09T07:17:06.450 回答