我看过很多例子和笔记,人们说你可以做到以下几点:
INSERT INTO DatesTable
SELECT DateAdd(day, 1, MAX(DatesTable.Dates)) from DatesTable
GO 10
GO n 次我听说是在 SQL 中循环的一种有效方式 - 但它不起作用,并且 SQL Server Management Studio 不允许它。
我做错了什么还是有我不知道的设置?如果不能做到,那么简单的替代方案是什么。
我看过很多例子和笔记,人们说你可以做到以下几点:
INSERT INTO DatesTable
SELECT DateAdd(day, 1, MAX(DatesTable.Dates)) from DatesTable
GO 10
GO n 次我听说是在 SQL 中循环的一种有效方式 - 但它不起作用,并且 SQL Server Management Studio 不允许它。
我做错了什么还是有我不知道的设置?如果不能做到,那么简单的替代方案是什么。
为确认其有效人员而欢呼。我找到了它不想工作的原因 - GO 只是想要在它之后添加另一个语句,所以我做了一个选择来查看它的工作,它允许它全部运行 - 简单而有用。
INSERT INTO DatesTable SELECT DateAdd(day, 1, MAX(DatesTable.Dates)) from DatesTable
GO 10
SELECT * FROM DatesTable
一般来说,使用单个 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