sql - 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
推荐阅读
- r - 是否有一个 R 函数来计算总概率,一旦我得到一个 Beta 后验,在 R 中以初始 Beta Prior 开始之后
- android - 当我为 Cashfree Payment 调用 doPayment() 方法时什么也没有发生
- migration - Lightroom:将编辑应用到原始文件
- user-interface - 带有 2 个图像(开/关)的 Tkinter 按钮在退出时保存变量,在下一个会话中加载它们
- flutter - 如何在类列表中搜索类的特定属性?
- python-3.x - 在类初始化程序中定期运行后台函数
- python - 如何在 Dash 中并排显示两个图表
- javascript - JS。由其他函数定义函数,都在一个对象内
- python-3.x - python检查键是否已经在字典中
- java - 看不到通知 - android studio