2013-05-22 34 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