SQL技术问询:如何在INSERT时同步使用Generator的NEXT VALUE
直接在INSERT语句中调用生成器插入多条数据
你可以直接在INSERT INTO的VALUES子句中调用生成器的取值函数,每条数据都会自动获取生成器的下一个递增值,无需单独执行SELECT NEXT VALUE语句。以下是主流数据库的具体写法:
Firebird(对应你提到的Generator)
Firebird中使用GEN_ID(生成器名, 步长)函数获取生成器的下一个值,步长填1即可实现递增:
INSERT INTO 你的表名 (counter列名, 其他列1, 其他列2) VALUES (GEN_ID(counter, 1), '数据1值1', '数据1值2'), (GEN_ID(counter, 1), '数据2值1', '数据2值2'), (GEN_ID(counter, 1), '数据3值1', '数据3值2');
PostgreSQL(序列Sequence)
PostgreSQL用nextval('序列名')函数获取下一个序列值:
INSERT INTO 你的表名 (counter列名, 其他列) VALUES (nextval('counter'), '内容A'), (nextval('counter'), '内容B'), (nextval('counter'), '内容C');
SQL Server(序列Sequence)
SQL Server使用NEXT VALUE FOR 序列名语法:
INSERT INTO 你的表名 (counter列名, 其他列) VALUES (NEXT VALUE FOR counter, '值X'), (NEXT VALUE FOR counter, '值Y'), (NEXT VALUE FOR counter, '值Z');
进阶优化:设置列默认值
如果希望每次插入时自动填充counter列,无需手动调用生成器函数,可以给该列设置默认值:
以Firebird为例:
ALTER TABLE 你的表名 ALTER COLUMN counter列名 SET DEFAULT GEN_ID(counter, 1);
之后插入数据时只需指定其他列:
INSERT INTO 你的表名 (其他列1, 其他列2) VALUES ('数据1值1', '数据1值2'), ('数据2值1', '数据2值2');
内容的提问来源于stack exchange,提问作者Specter771908
相关产品推荐
相关产品推荐

