2013-05-22 35 views
3

我见过很多例子和说明,人们说明你可以做到以下几点: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不允许它。

我做错了什么或有没有我不知道的设置?如果无法做到,那么简单化的选择是什么。

+2

它在SQL Server Management Studio中对我来说工作得很好 - 但只有**那里(和其他SQL Server工具)因为GO是**不是** SQL/T-SQL关键字,而是SSMS/SQLCMD特定的“分隔符” –

+1

SSMS * Intellisense *不喜欢它,但它运行良好,以我的经验。此外,对于nit @ marc_s的注释,它也在其他客户端工具(如SqlCmd)中定义。 –

+0

@Damien_The_Unbeliever:你是挑剔的 - 但当然是对的:-) –

回答

2

欢呼声以确认其有效的人。 我发现它不想工作的原因 - GO只是想在它后面添加其他语句,所以我做了一个select来看它的工作原理,它允许它运行 - 简单而有用。

INSERT INTO DatesTable SELECT DateAdd(day, 1, MAX(DatesTable.Dates)) from DatesTable 
GO 10 
SELECT * FROM DatesTable 
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