【发布时间】:2013-04-09 09:17:41
【问题描述】:
我想用 SQL 写一个 with in 查询。
出现一些错误。请帮忙:
DECLARE @Start AS DATETIME;
DECLARE @End AS DATETIME;
SET @Start = '2013-04-09';
SET @End = '2013-04-11';
with View_Solidnet_Training as
(
with View_Solidnet_Training as
(
select cast(@Start as datetime) DateValue
union all
select DateValue + 1
from View_Solidnet_Training
where DateValue + 1 <= cast(@End as datetime)
)
insert into OBJ_Availability
select 34, DateValue, 'AM', 2, 'Test' from View_Solidnet_Training;
)
select * from View_Solidnet_Training where PK_Training_ID is not null;
错误:
消息 156,第 15 级,状态 1,第 7 行
关键字“with”附近的语法不正确。
消息 319,第 15 级,状态 1,第 7 行
关键字“with”附近的语法不正确。如果此语句是公用表表达式或 xmlnamespaces 子句,则前面的语句必须以分号结束。
消息 102,第 15 级,状态 1,第 17 行
')' 附近的语法不正确。
【问题讨论】:
-
你到底想做什么?!?!?您不能在 CTE 中包含
DECLARE和SET,并且您不能将 CTE 插入到另一个表中。请用简单的英语解释您要做什么..... -
Marc 是对的 - 您的示例查询有太多错误,我们无法看到您想要实现的目标。也许如果你解释一下你的表结构以及你想从中得到什么,那会有所帮助。
-
我已经改变了一点。但我必须将数据从视图插入到表中。中间的“With”完美。它在表中插入行。但在 SSIS 中,此解决方案仅适用于视图中的一行。所以我需要创建另一个循环来检查视图的 ID 是否不为零,它必须声明新日期并插入视图的下一行。
-
您不能使用 CTE 嵌套两个操作 - 您需要第一个 CTE 来组合数据,然后执行
INSERT INTO OBJ_Availability SELECT (columns) FROM CTE1,然后您需要创建第二个单独的(不是 嵌套!)CTE 再次选择数据。 -
CTE looping query 的可能重复项
标签: sql sql-server loops with-statement