2016-12-29 11 views
-1

ここに私の問題があります。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 

どのようにこれを達成するためのアイデアですか?

+0

をちょうどそれの挿入文とisnide引数を追加し、その宿題としてようで、それは本当に簡単です。ループを追加する – Moudiz

+0

行レベルまたは列レベルで挿入したいのですが、クエリを見ると範囲に応じてその数の列に挿入したいと思われますか?明確にしてください –

答えて

0

を私はあなただけのループ

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 
+0

ありがとう!完璧にうまくいった。その範囲の裁定も同様に行います。ありがとう:) –

2

あなたは以下のようにループながらを使用することができます。

Declare @Index AS INT=0 

WHILE @Index<@Range 
BEGIN 
    INSERT into MyTable Values(@Index) 
    SET @[email protected]+1 
END 
+0

最初にこの問題を考える...しかし、私は挿入が列レベルで発生する必要があると思うプロシージャの挿入ステートメントで。 –

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

select @RANGE_COUNT [email protected] 
    //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 
+0

この提案にはいくつかの欠陥があります... 1.どこで '@ RANGE_COUNT'の初期値を設定しますか?なぜintの代わりに数値ですか? 3、ループの状態が間違っています。 4.挿入が間違っています - 毎回100を挿入します。 –

+0

@ZoharPeledチェックしてください。ポイント4はOP – Moudiz

+1

からはっきりしません。十分に明確です - 0から@ Rangeまでの数字を挿入したいと考えています。私のdownvoteを撤回しました。 –

0

そして、ここを学ぶときに、CTEを使用する理由あなたの先生は疑うことを考えていますセットベースのアプローチです:

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に基づく)

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 
+1

私はOPが '0'の値を挿入するよう要求しているので、' -1'は 'row_number'にあるべきだと思います... –

関連する問題