2016-12-29 68 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

它似乎一門功課,這是很容易的,只需添加INSERT語句和它isnide參數。添加一個循環 – Moudiz

+0

所以你想插入在行級別或列級別。通過觀看您的查詢似乎你想插入在這個數量的列取決於範圍?請澄清 –

回答

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 
+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'的初始值? 2.爲什麼它是數字而不是int? 3,你的循環條件是錯誤的。 4.您的插入錯誤 - 每次插入100次。 –

+0

@ZoharPlease現在請檢查,因爲點4它不清楚從OP – Moudiz

+1

我認爲這足夠清楚 - 他想插入0和'@ Range'的值之間的數字。撤回我的downvote。 –

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

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

我認爲'-1'應該在'row_number'上,因爲OP要求插入值'0'... –