我在数据库中有一个列,用于存储调查的密码。目前,数字列表是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
感谢您提供任何帮助或建议。
答案 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是否为主键,默认情况下它都是不同的,不允许您插入重复记录。
您还可以考虑添加一列来记录您创建数据的时间点,以防您在特定日期/某个时间知道某些事情。