首页 > 解决方案 > 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

标签: sqlsql-servertsql

解决方案


这是基于问题的一种简单方法:

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

推荐阅读