根据数字将单个值插入表中

时间:2016-12-29 06:44:40

标签: sql sql-server

这是我的问题:我在SQL Server 2012中有一个存储过程,应该执行以下操作。

我将传递一个输入参数@Range,存储过程应该将值插入从0到@Range-1的表中。

CREATE PROC MyExample
     (@Range INT)
AS
BEGIN
   // Suppose the value of @Range is 100
   // So I should do INSERT into MyTable Values(0,1,2,3,4,5,6,......99)
END

知道如何实现这个目标吗?

5 个答案:

答案 0 :(得分:2)

您可以使用 while循环,如下所示:

Declare @Index AS INT=0

WHILE @Index<@Range
BEGIN
    INSERT into MyTable Values(@Index)
    SET @Index=@Index+1
END

答案 1 :(得分:0)

我想你的老师可能会怀疑你在学习循环时使用cte的原因

CREATE PROC MyExample
(
    @Range INT,
)
AS
BEGIN
    ;WITH numbers AS 
    (  
        SELECT 0 AS Value WHERE @Range >= 0 -- Validate the @Range value too, try 0 or negative values
        UNION ALL SELECT Value + 1 FROM numbers WHERE Value + 1 < @Range
    )
    INSERT INTO MyTable
    SELECT * FROM numbers
    OPTION (MAXRECURSION 0)
END

答案 2 :(得分:0)

CREATE PROC MyExample
(
    @Range INT,
)
AS
BEGIN
declare @RANGE_COUNT int

select @RANGE_COUNT =@Range 
   //Suppose the value of @Range is 100
while @RANGE_COUNT<>0
begin
  //So I should do INSERT into MyTable Values(0,1,2,3,4,5,6,......99)
  INSERT into MyTable Values(@Range)
set @RANGE_COUNT = RANGE_COUNT -1
end
END

答案 3 :(得分:0)

这是基于集合的方法:

CREATE PROC MyExample
(
    @Range INT,
)
AS
BEGIN

    INSERT INTO MyTable (Number)
    SELECT TOP (@Range) ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) - 1
    FROM sys.objects s1       
    CROSS JOIN sys.objects s2 
END

(基于this SO post

答案 4 :(得分:0)

使用计数表技术:

DECLARE @range INT = 100

SELECT TOP(@range) -1 + ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS rn 
FROM 
    (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) t1(n) CROSS JOIN --10
    (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) t2(n) CROSS JOIN --100
    (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) t3(n)            --1000
    --...continue to cover all possible @range values
相关问题