Sql 递增多行插入语句中的值

Sql 递增多行插入语句中的值,sql,database,oracle,Sql,Database,Oracle,这应该是一个快速的,不幸的是我今天有点慢,需要你的帮助 为了用一条语句插入多行,我基本上编写了一条具有以下结构的INSERT语句: INSERT INTO TABLE_TO_INSERT_INTO SELECT -- ..., -- ..., -- ..., (SELECT MAX(ID)+1 FROM SOME_TABLE) As ID, -- ..., -- ..., FROM ( -- Subqueries and

这应该是一个快速的,不幸的是我今天有点慢,需要你的帮助

为了用一条语句插入多行,我基本上编写了一条具有以下结构的INSERT语句:

INSERT INTO TABLE_TO_INSERT_INTO 
SELECT 
    -- ...,
    -- ...,
    -- ...,
    (SELECT MAX(ID)+1 FROM SOME_TABLE) As ID,
    -- ...,
    -- ...,
FROM
    (
        -- Subqueries and Joins here
        -- ...
    ) ;
这通常工作得很好,但有一个部分:ID

它必须是唯一的一个约束确保了这一点,但当前选择ID的方式并非如此,因为它对通过上述语句插入的所有行使用选定的值

在插入每一行之后,是否有任何方法可以强制重新评估某个_表中的SELECT MAXID+1作为ID部分

我真的不想使用触发器,而是在纯SQL的基础上实现它


我希望有人能找到解决办法,我今天不知所措,真的看不出来。提前谢谢

既然您正在使用Oracle,那么我建议您使用

在你的询问中

SELECT customers_seq.nextval from yourTable;

上述查询保证在每次执行后返回唯一的值。

因为您使用的是Oracle,所以我建议您使用

在你的询问中

SELECT customers_seq.nextval from yourTable;

上述查询保证在每次执行后返回唯一的值。

在SQL 2012中,插入数据时可以使用序列和相同的序列

您可以参考以下内容:
[

在SQL 2012中,插入数据时可以使用序列并使用相同的序列

您可以参考以下内容:
[

除非要插入到某个非插入的表中,否则请从某个表中选择MAXID+1,因为ID将始终返回相同的值,因为MAXID不受表中要插入的其他行的影响


理论上,您可以使用某种行号偏移量加上MAXID值,但我强烈建议您不要这样做。您最好使用一个具有种子和增量计算值的字段,这符合最佳实践,因为这将很好地处理分布式事务。

除非您插入到某个表中,否则请选择某些_表As ID中的CT MAXID+1将始终返回相同的值,因为MAXID不受表_TO_INSERT_中其他行的影响

理论上,您可以使用某种行号偏移量加上MAXID值,但我强烈建议您不要这样做。您最好按照最佳实践使用一个具有种子和增量计算值的字段,因为这将很好地处理分布式事务。

您可以使用ROWNUM,但在排序时要小心,然后您可以围绕原始SELECT创建了一个额外的子查询

您可以使用ROWNUM,但在排序时要小心,然后您需要在原始SELECT周围添加一个子查询


尝试使用sequence select…,seq_name.nextval…。还可以查看一般使用maxid+1的一些问题。尝试使用sequence select…,seq_name.nextval…。还可以查看一般使用maxid+1的一些问题。如果有帮助的话。然后,请随意接受答案。:将在4分钟后完成;-为什么使用nocache?哦,我明白了你从文档中复制了这个例子……奇怪的是,他们会宣传它。@jWeaver在开始部分中是否可以使用子查询而不是1000或任何其他硬编码的数字呢?尝试这样做时,我总是遇到一个错误:@daZza-no;。如果有帮助的话。然后,请随意接受答案。:将从现在开始做;-为什么se nocache?哦,我看到你从文档中复制了这个例子……奇怪的是,他们会推广它。@jWeaver是否可以在开始部分使用子查询而不是1000或任何其他硬编码的数字?我在尝试这样做时不断遇到一个错误:@daZza-no;。这对标记为Oracle的问题不完全有帮助。那就是对于标记为Oracle的问题没有完全的帮助。
(SELECT MAX(ID)+ROWNUM FROM SOME_TABLE) As ID,