0

我在数据库中有一个列,用于存储调查的密码。目前号码列表是 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

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

4

3 回答 3

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);
于 2013-09-03T18:39:15.870 回答
0

好吧,由于您插入的数字较少,您只需从现有集合中选择一个范围并添加一个常量:

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

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

于 2013-09-03T18:29:44.763 回答
0

在不了解您如何插入这些数据的情况下,我真的看不出您采用的方法有什么问题。无论 PIN 是否是主键,默认情况下它都是不同的,并且不允许您插入重复记录。

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

于 2013-09-03T18:33:47.107 回答