我见过很多例子和说明,人们说明你可以做到以下几点:T-SQL GO语句n次
INSERT INTO DatesTable
SELECT DateAdd(day, 1, MAX(DatesTable.Dates)) from DatesTable
GO 10
GO N次我听到的是在SQL循环的一个有效办法 - 但它不不起作用,SQL Server Management Studio不允许它。
我做错了什么或有没有我不知道的设置?如果无法做到,那么简单化的选择是什么。
我见过很多例子和说明,人们说明你可以做到以下几点:T-SQL GO语句n次
INSERT INTO DatesTable
SELECT DateAdd(day, 1, MAX(DatesTable.Dates)) from DatesTable
GO 10
GO N次我听到的是在SQL循环的一个有效办法 - 但它不不起作用,SQL Server Management Studio不允许它。
我做错了什么或有没有我不知道的设置?如果无法做到,那么简单化的选择是什么。
欢呼声以确认其有效的人。 我发现它不想工作的原因 - GO只是想在它后面添加其他语句,所以我做了一个select来看它的工作原理,它允许它运行 - 简单而有用。
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
它在SQL Server Management Studio中对我来说工作得很好 - 但只有**那里(和其他SQL Server工具)因为GO是**不是** SQL/T-SQL关键字,而是SSMS/SQLCMD特定的“分隔符” –
SSMS * Intellisense *不喜欢它,但它运行良好,以我的经验。此外,对于nit @ marc_s的注释,它也在其他客户端工具(如SqlCmd)中定义。 –
@Damien_The_Unbeliever:你是挑剔的 - 但当然是对的:-) –