我看过很多例子和说明,人们说你可以做到以下几点:
INSERT INTO DatesTable
SELECT DateAdd(day, 1, MAX(DatesTable.Dates)) from DatesTable
GO 10
我听说过是一种在SQL中循环的有效方法 - 但它不起作用且SQL Server Management Studio不允许它。
我做错了什么或者是否有我不知道的设置?如果不能做到,那么简单的替代方案是什么。
答案 0 :(得分:2)
为确认有效人士而欢呼。 我找到了它之所以不想工作的原因 - GO之后只想要另一个声明,所以我做了一个选择,看看它是否有效,它允许一切运行 - 简单而有用。
INSERT INTO DatesTable SELECT DateAdd(day, 1, MAX(DatesTable.Dates)) from DatesTable
GO 10
SELECT * FROM DatesTable
答案 1 :(得分:0)
通常,使用单个sql查询比使用循环更具性能和可维护性/适应性。
一种机制是使用包含数字序列的查找表。一个这样的未记录但有用的表是master..spt_values
。
INSERT INTO
DatesTable
SELECT
DATEADD(DAY, SEQUENCE.number, BASE.date)
FROM
master..spt_values AS SEQUENCE
CROSS JOIN
(SELECT MAX(Dates) AS date FROM DatesTable) AS BASE
WHERE
SEQUENCE.type = 'P'
AND SEQUENCE.number BETWEEN 1 AND 10