如何在存储过程中使用WHILE?

时间:2013-03-14 10:15:30

标签: sql sql-server tsql

我创建了这个脚本,允许在表中插入一些转储数据。 当我执行这个SPROC并插入@N时,SPROC运行无限。

知道我做错了什么。

CREATE PROCEDURE CreateSampleData
    @N INT 
AS 
    DECLARE @row INT 
    SET @row = 1 

    DECLARE @randomGuid VARCHAR(36) 
    DECLARE @randomText VARCHAR 

    WHILE @row <= @N
      BEGIN 
      -- Set Random Values 
      SET @randomText = (SELECT LEFT(Cast(Newid() AS VARCHAR(36)), 20)) 
      SET @randomGuid = Newid()

      INSERT INTO [XXX].[dbo].[YYY] 
                  ([Id],
                   [eventid], 
                   [eventtitle], 
                   [day number], 
                   [day], 
                   [datetimestart], 
                   [datetimeend], 
                   [location], 
                   [staff], 
                   [uniquestudentreference], 
                   [reminder]) 
      VALUES      ( @randomGuid,
                    @randomText, 
                    @randomText, 
                    '2', 
                    'Monday', 
                    '08:50:00', 
                    '10:50:00', 
                    @randomText, 
                    @randomText, 
                    'Silvia', 
                    'n' ) 
  END 
GO

3 个答案:

答案 0 :(得分:5)

为什么要循环?一次性做到这一套

  INSERT INTO [XXX].[dbo].[YYY] 
              ([Id],
               [eventid], 
               [eventtitle], 
               [day number], 
               [day], 
               [datetimestart], 
               [datetimeend], 
               [location], 
               [staff], 
               [uniquestudentreference], 
               [reminder]) 
  SELECT TOP (1000)
    NEWID(),
    randomText, 
    randomText, 
    '2', 
    'Monday', 
    '08:50:00', 
    '10:50:00', 
    randomText, 
    randomText, 
    'Silvia', 
    'n'
  FROM
     (SELECT LEFT(Cast(Newid() AS VARCHAR(36)), 20) AS randomText) X
     CROSS JOIN
     sys.columns c1
     CROSS JOIN
     sys.columns c2
     CROSS JOIN
     sys.columns c3

答案 1 :(得分:2)

您需要增加@row。在您的WHILE声明结束时,您应该:

SET @row = @row+1

答案 2 :(得分:1)

您没有递增计数器变量,您应该添加:

SET @row = @row + 1

在END子句之前