Search code examples
sqlt-sql

I am trying to insert randomly generated numbers into an empty table using a cursor


I am trying to insert randomly generated numbers into an empty table using a cursor but I want it to go through all possible combinations with out having duplicates of the same number and I want to add conditions to what needs to be inserted. I want it to run through the code multiple times, I don't want to have to execute it to the whole time to get like 1 million rows.

So I want to know how would I add conditions to the insert? and Would I need to create a proc for it to run multiple times?

DECLARE @iNumber1 INT
        ,@iNumber2 INT
        ,@iNumber3 INT
        ,@iNumber4 INT
        ,@iNumber5 INT
        ,@iNumber6 INT
        ,@iNumber7 INT
        ,@iNumber8 INT
        ,@iNumber9 INT
        ,@iNumber10 INT
 
DECLARE GenRandNum CURSOR FOR 
SELECT ABS(CAST(NEWID() AS binary(6)) %50) + 1 AS Number1
,ABS(CAST(NEWID() AS binary(6)) %50) + 1 AS Number2
,ABS(CAST(NEWID() AS binary(6)) %50) + 1 AS Number3
,ABS(CAST(NEWID() AS binary(6)) %50) + 1 AS Number4
,ABS(CAST(NEWID() AS binary(6)) %50) + 1 AS Number5
,ABS(CAST(NEWID() AS binary(6)) %50) + 1 AS Number6
,ABS(CAST(NEWID() AS binary(6)) %50) + 1 AS Number7
,ABS(CAST(NEWID() AS binary(6)) %50) + 1 AS Number8
,ABS(CAST(NEWID() AS binary(6)) %50) + 1 AS Number9
,ABS(CAST(NEWID() AS binary(6)) %50) + 1 AS Number10

 
OPEN GenRandNum 
FETCH NEXT FROM GenRandNum INTO @iNumber1, @iNumber2, @iNumber3, @iNumber4, @iNumber5, @iNumber6, @iNumber7, @iNumber8, @iNumber9, @iNumber10 
 
WHILE @@FETCH_STATUS = 0 
BEGIN 
    INSERT INTO GenNumbers (Number1, Number2, Number3, Number4, Number5, Number6, Number7, Number8, Number9, Number10) 
    VALUES (@iNumber1, @iNumber2, @iNumber3, @iNumber4, @iNumber5, @iNumber6, @iNumber7, @iNumber8, @iNumber9, @iNumber10 ) 
 
    FETCH NEXT FROM GenRandNum INTO @iNumber1, @iNumber2, @iNumber3, @iNumber4, @iNumber5, @iNumber6, @iNumber7, @iNumber8, @iNumber9, @iNumber10
END 
 
CLOSE GenRandNum 
DEALLOCATE GenRandNum

the help would be greatly appreciated


Solution

  • There is no need for a cursor. Just use GENERATE_SERIES

    INSERT INTO GenNumbers
        (Number1, Number2, Number3, Number4, Number5, Number6, Number7, Number8, Number9, Number10)
    SELECT
      CHECKSUM(NEWID()),
      CHECKSUM(NEWID()),
      CHECKSUM(NEWID()),
      CHECKSUM(NEWID()),
      CHECKSUM(NEWID()),
      CHECKSUM(NEWID()),
      CHECKSUM(NEWID()),
      CHECKSUM(NEWID()),
      CHECKSUM(NEWID()),
      CHECKSUM(NEWID())
    FROM GENERATE_SERIES(1, 1000000);