T-SQL GO语句n次

时间:2013-05-22 07:43:50

标签: sql sql-server-2012

我看过很多例子和说明,人们说你可以做到以下几点:

INSERT INTO DatesTable  
   SELECT DateAdd(day, 1, MAX(DatesTable.Dates)) from DatesTable
GO 10

我听说过是一种在SQL中循环的有效方法 - 但它不起作用且SQL Server Management Studio不允许它。

我做错了什么或者是否有我不知道的设置?如果不能做到,那么简单的替代方案是什么。

2 个答案:

答案 0 :(得分:2)

为确认有效人士而欢呼。 我找到了它之所以不想工作的原因 - GO之后只想要另一个声明,所以我做了一个选择,看看它是否有效,它允许一切运行 - 简单而有用。

INSERT INTO DatesTable  SELECT DateAdd(day, 1, MAX(DatesTable.Dates)) from DatesTable
GO 10
SELECT * FROM DatesTable

答案 1 :(得分: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