如何在现有数字列表后插入数字列表

时间:2013-09-03 18:25:50

标签: sql

我在数据库中有一个列,用于存储调查的密码。目前,数字列表是5100 - 6674.我需要将这些引脚号保留在当前调查中,但我还需要在同一列中添加新的引脚号列表。我只想确保我创建的查询将新列表插入列而不影响旧列表。还有另一列给出了调查类型。我还需要将新类型添加到新列表中,例如,目前我的引脚列表范围为5100 - 6674,调查类型为CLN。下一个列表是8100 - 8855的一系列数字,调查类型为TM。我不想把当前正在进行的调查弄得一团糟,所以我有一次尝试才能做到正确,否则会有很大的混乱。这是我提出的查询。

DECLARE @PIN INT
SET @PIN = 8100
WHILE (@PIN <= 8855)
BEGIN
    Insert into Survey (Pin) values (@PIN)
    Select @PIN = @PIN + 1
    from Survey
    where Pin > 6674
END

UPDATE Survey SET Type = 'TM'
WHERE Pin > 6674

感谢您提供任何帮助或建议。

3 个答案:

答案 0 :(得分:1)

我强烈建议您在引脚的同时设置type并修复增量步骤:

DECLARE @PIN INT;
SET @PIN = 8100;
WHILE (@PIN <= 8855)
BEGIN
    Insert into Survey(Pin, Type)
        values (@PIN, @TYPE);

    set @PIN = @PIN + 1;
END;

如果您想学习更多SQL,也可以使用单个语句执行此操作:

with pins as (
      select 8100 as pin
      union all
      select pin + 1
      from pins
      where pin < 8855
  )
Insert into Survey(Pin, Type)
    select pin, 'TM'
    from pins;
option (MAXRECURSION 10000);

答案 1 :(得分:0)

好吧,因为你插入的数字较少,你可以从现有的集合中选择一个范围并添加一个常量:

INSERT INTO Survey (PIN, Type)
SELECT Pin + 3000, 'TM'
FROM Survey
WHERE Pin BETWEEN 5100 and 5855

如果您要插入更多值,则可以批量使用相同的技术。

答案 2 :(得分:0)

如果不了解您是如何插入这些数据的话,我并没有发现您正在采取的方法有任何问题。无论PIN是否为主键,默认情况下它都是不同的,不允许您插入重复记录。

您还可以考虑添加一列来记录您创建数据的时间点,以防您在特定日期/某个时间知道某些事情。