2013-03-14 2 views
0

일부 덤프 데이터를 테이블에 삽입 할 수있는이 스크립트를 작성했습니다. 이 SPROC를 실행하고 @N을 삽입하면 SPROC가 무한대로 실행됩니다.WHILE을 저장 프로 시저 내부에서 사용하는 방법?

내가 뭘 잘못하고 있는지 알기.

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 

답변

2

@row을 증가시켜야합니다. 당신의 WHILE 문장의 끝에서 당신이 놓아야합니다 : 당신은 당신의 카운터 변수를 증가하지 않는

SET @row = @row+1 
+0

아하하, 바보 같은 실수. 저를 지적 해 주셔서 감사합니다 :-) – GibboK

1

, 당신은 추가해야합니다 :

SET @row = @row + 1

단지 END 절

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