TSQL-插入基于整数范围的行



我正在创建一个将数字作为参数的SPROC。我需要取这个数字,在它前面取2个数字,在后面取2个号码,然后把它们插入一个临时表中。例如-int为355。我需要写一个插入语句,插入353、354、355、356和357。(-2&+2(。我不完全确定该怎么做。我在想也许是光标?在C#中,我会做一个for循环,但我不确定在集合语言中采用正确的方法。谢谢

以下是我目前所拥有的:

CREATE PROCEDURE [dbo].[GetLanePrediction]
@startzip int
AS
BEGIN
--SET NOCOUNT ON;
DECLARE @posnegval int = 2
DECLARE @TempZips TABLE (ID INT IDENTITY(1,1), Zip INT)
--INSERT INTO @TempZips (Zip)
--Some kind of for loop or cursor here?
END

输出将创建一个包含5行的临时表(@TempZips(。像这样:

ID     Zip
1      353
2      354
3      355
4      356
5      357

以下是一个基于问题的简单方法:

CREATE PROCEDURE [dbo].[GetLanePrediction] (
@onenumber int
) AS
BEGIN
DECLARE @TempZips TABLE (ID INT IDENTITY(1,1), Zip INT)
INSERT INTO @TempZips (Zip)
SELECT one_number + v.n
FROM (VALUES (-2), (-1), (0), (1), (2)) v(n);
END;

编辑:

您也可以使用递归CTE:

;WITH n as (
SELECT -@posnegval as n
UNION ALL
SELECT n + 1
FROM n
WHERE n < @posnegval
)
INSERT INTO @TempZips (Zip)
SELECT @onenumber + n.n
FROM n
-- WITH OPTION (maxrecursion 0);  -- only needed if you'll ever have more than 100 numbers

只是使用特别计数表的另一个选项

Declare @I int =355
Declare @R int =2
Select ID = N 
,Zip= -1+@I-@R+N
From ( Select Top ((@R*2)+1) N=Row_Number() Over (Order By (Select NULL)) From master..spt_values n1 ) A

退货

ID  Zip
1   353
2   354
3   355
4   356
5   357

最新更新