我读到一种生成日期范围的方法:
Generate a set or sequence without loops
。我在应用这个方法上遇到困难。
此代码成功生成日期表
@Start
到
@End
:
;WITH d([Date]) AS (
SELECT DATEADD(DAY, n-1, @Start)
FROM (
SELECT TOP (DATEDIFF(DAY, @Start, @End) + 1)
ROW_NUMBER() OVER (ORDER BY Number) FROM master..spt_values
) AS x(n)
)
SELECT d.Date
FROM d
我对更高级的SQL还比较陌生,所以这就是黑盒。但它起作用了。所以现在我想将结果保存到一个表变量中,以便进一步处理:
DECLARE @Days TABLE ([Date] DATE NULL, Val INT NULL)
日期将具有与其关联的值。然而,仅仅插入到表中似乎不起作用。以下语句或将其包装在另一个select语句中都不起作用:
INSERT INTO @Days (Date)
WITH d([Date]) AS (
SELECT DATEADD(DAY, n-1, @Start)
FROM (
SELECT TOP (DATEDIFF(DAY, @Start, @End) + 1)
ROW_NUMBER() OVER (ORDER BY Number) FROM master..spt_values
) AS x(n)
)
SELECT d.Date
FROM d
似乎“最后一条语句必须以分号结尾”,或者根据分号的存在而抛出“incorrect syntax near;”。
你有什么指示吗?我很困惑。