有个数据库,需要批量添加设备
insert into Acvxi_BoardInfo 
(Board_Name,Controller_ID,Board_Serial,Board_Addr,Area_ID,Group_No)
values 
('1-1',29, 1,1,'01','0114 '),
('1-2',29, 1,2,'01','0114 '),
29,为设备编号,在数据库另一张表中有对应关系
0114,为设备分组编号,同样在另一张表中有对应关系
查如下一设备数据就要修改如下
'1-1',30, 1,1,'01','0115 '),
('1-2',30, 1,2,'01','0115 '),
问下,有什么办法可以将我需要的几个自增值按自己要求快速修改吗,现在每次都需要人工修改,比较麻烦
此外1-1,这个字段,如果设置纯数值自增也是可以额,该怎么写比较好,1-N下面是实际插入的情况,不太会用SQL 见笑了
insert into Acvxi_BoardInfo 
(Board_Name,Controller_ID,Board_Serial,Board_Addr,Area_ID,Group_No)
values 
('1-1',29, 1,1,'01','0114 '),
('1-2',29, 1,2,'01','0114 '),
('1-3',29, 1,3,'01','0114 '),
('1-4',29, 1,4,'01','0114 '),
('1-5',29, 1,5,'01','0114 '),
('1-6',29, 1,6,'01','0114 '),
('1-7',29, 1,7,'01','0114 '),
('1-8',29, 1,8,'01','0114 '),
('1-9',29, 1,9,'01','0114 '),
('1-10',29, 1,10,'01','0114 '),
('1-11',29, 1,11,'01','0114 '),
('1-12',29, 1,12,'01','0114 '),
('1-13',29, 1,13,'01','0114 '),
('1-14',29, 1,14,'01','0114 '),
('1-15',29, 1,15,'01','0114 '),
('1-16',29, 1,16,'01','0114 '),
('2-1',29, 2,1,'01','0114 '),
('2-2',29, 2,2,'01','0114 '),
('2-3',29, 2,3,'01','0114 '),
('2-4',29, 2,4,'01','0114 ');
('2-5',29, 2,5,'01','0114 ')
('2-6',29, 2,6,'01','0114 ')
('2-7',29, 2,7,'01','0114 ')
('2-8',29, 2,8,'01','0114 ')
('2-9',29, 2,9, '01','0114 ')
('2-10',29, 2,10,'01','0114 ')
('2-11',29, 2,11,'01','0114 ')
('2-12',29, 2,12,'01','0114 ')
('2-13',29, 2,13,'01','0114 ')
('2-14',29, 2,14,'01','0114 ')
('2-15',29, 2,15,'01','0114 ')
('2-16',29, 2,16,'01','0114 ')
('1-1',30, 1,1,'01','0115 '),
('1-2',30, 1,2,'01','0115 '),
('1-3',30, 1,3,'01','0115 '),
('1-4',30, 1,4,'01','0115 '),
('1-5',30, 1,5,'01','0115 '),
('1-6',30, 1,6,'01','0115 '),
('1-7',30, 1,7,'01','0115 '),
('1-8',30, 1,8,'01','0115 '),
('1-9',30, 1,9,'01','0115 '),
('1-10',30, 1,10,'01','0115 '),

解决方案 »

  1.   

    看看这是不是你需要的DECLARE @Controller_ID INT =29   --要生成数据Controller_ID
    DECLARE @Group_No VARCHAR(200)='0115'  --同上
    DECLARE @Board_Serial INT =2  --Board_Name的前缀也是要生成数据的Board_Serial值
    DECLARE @CreateRowCount INT =10  --要生成数据的行数
    DECLARE @AreaID VARCHAR(100)='01'insert into Acvxi_BoardInfo (Board_Name,Controller_ID,Board_Serial,Board_Addr,Area_ID,Group_No)SELECT CONVERT(VARCHAR,@Board_Serial)+'-'+ CONVERT(VARCHAR,sv.number+ISNULL(b.maxBoardAddr,0))
           ,@Controller_ID,@Board_Serial,sv.number+ISNULL(b.maxBoardAddr,0),@AreaID,@Group_No
    FROM [master].dbo.spt_values AS sv 
    OUTER APPLY(
    --计算原有数据中Board_Addr的最大值,生成的数据在这个基础上递增
    SELECT MAX(Board_Addr) AS maxBoardAddr FROM Acvxi_BoardInfo AS a where a.Board_Serial=@Board_Serial
    ) b
    WHERE sv.[type]='P' AND sv.number BETWEEN 1 AND @CreateRowCount