我見過很多例子和說明,人們說明你可以做到以下幾點: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:你是挑剔的 - 但當然是對的:-) –