有没有办法将新记录插入到具有非唯一ID的表中,并将此id设置为同一SQL语句中的下一个数字?
像
这样的东西INSERT INTO T1 (id, fname, lname)
VALUES ([last id + 1], 'Dan', 'Thomson');
答案 0 :(得分:2)
这可能有效
INSERT INTO T1 (id, fname, lname)
VALUES (ifnull((select max(id) from T1),0) + 1, 'Dan', 'Thomson')
答案 1 :(得分:0)
DECLARE @COUNTER INT;
SET @COUNTER = 1;
WHILE(@COUNTER <= XXX)
BEGIN
INSERT INTO T1 (id, fname, lname)
VALUES (@COUNTER, @FNAME , @LNAME);
SET @COUNTER = @COUNTER + 1;
END
答案 2 :(得分:0)
<强> Built-in function MAX 强>
INSERT INTO T1 (id, fname, lname)
SELECT ifnull(MAX(id)+ 1,1), 'Dan', 'Thomson' FROM T1
Insert and set value with max()+1 problems
SELECT MAX(col)+1不安全 - 它不能确保您不会插入具有相同customer_id值的多个客户,无论是从同一表还是其他表中选择。
为了提高效果,请添加索引:
CREATE INDEX T1_INDEX1 ON T1 (id) DESC
<强>参考文献:强>
单元测试
-- Create Table
SET SCHEMA QTEMP;
CREAT TABLE testtbl (
id integer not null default,
fname char(10) not null default,
lname char(10) not null default)
;
-- Initialize Table with Data
insert into
testtbl ( id , fname, lname)
values
( 1, 'fname1', 'lname_1'),
( 2, 'fname2', 'lname_2'),
( 2, 'fname3', 'lname_3'),
( 3, 'fname4', 'lname_4')
;
-- Test Insert Statement
INSERT INTO
testtbl ( id, fname, lname )
SELECT ifnull(MAX( id ) + 1, 1), 'Dan', 'Thomson' FROM testtbl;
--Confirm Expectation
select * from testtbl;
ID FNAME LNAME
-------------------------------------
1 fname1 lname_1
2 fname2 lname_2
3 fname4 lname_4
4 Dan Thomson
答案 3 :(得分:0)
如果您想要插入具有唯一ID的表的所有内容,请使用max +1
INSERT INTO T1 (id, fname, lname)
select
rownumber() over() + ifnull((select max(T1.id) from T1), 0),
T2.zone1, T2.zone2
from T2