![](/img/trans.png)
[英]SQL “SELECT IN (Value1, Value2…)” with passing variable of values into GridView
[英]SQL Server / Oracle : insert value from a select statement for an non-identity column (Insert into…values((select statement), value1, value2, value3)
我想从 select 语句中插入 ( user_id
) 值,如下所示。 它有效,但user_id
不会增加,因为user_id
不是标识列。 我想在每次插入查询运行时增加user_id
计数。 现在它没有发生。 我创建了一个数据库小提琴。 我希望此代码适用于 SQL 服务器和 Oracle 版本。
https://dbfiddle.uk/?rdbms=sqlserver_2019l&fiddle=ba954e4d37831a46aea3b3f3b499cc51
CREATE TABLE b_user (
user_id INT,
user_name VARCHAR(250),
user_email VARCHAR(250),
user_address VARCHAR(250),
user_city VARCHAR(50),
user_state VARCHAR(5),
user_country VARCHAR(5),
user_zip VARCHAR(10)
)
insert into b_user (
user_id,
user_name,
user_email,
user_address,
user_city,
user_state,
user_country,
user_zip
) values (
1,
'Alice',
'alice@example.com',
'A house',
'A city',
'STATE',
'ABC',
'ZZ0123'
);
insert into b_user (user_id,
user_name,
user_email,
user_address,
user_city,
user_state,
user_country,
user_zip)
values (
(select max(user_id) from b_user),
'david brown',
'david@david.com',
'david''s house',
'chicago',
'il',
'usa',
60007
)
将列定义为identity
列:
CREATE TABLE b_user (
user_id INT IDENTITY(1, 1),
user_name VARCHAR(250),
user_email VARCHAR(250),
user_address VARCHAR(250),
user_city VARCHAR(50),
user_state VARCHAR(5),
user_country VARCHAR(5),
user_zip VARCHAR(10)
);
然后从INSERT
中删除它。 它会自动分配一个值。
编辑:
如果无法修改表,可以尝试:
values (
(select coalesce(max(user_id) + 1, 1) from b_user),
'david brown',
'david@david.com',
'david''s house',
'chicago',
'il',
'usa',
60007
)
这不是线程安全的,不推荐。 这就是identity
列有用的原因。
您可以创建一个从最大 ID 开始的序列。 然后您可以为序列轻松增加 select 的下一个值。
编辑:如果您需要序列以表中的值开始,您可以包装在此处描述的 exec 语句中
CREATE SEQUENCE IDSeq
START WITH 2
INCREMENT BY 1 ;
GO
然后
values (
(NEXT VALUE FOR IDSeq),
'david brown',
'david@david.com',
'david''s house',
'chicago',
'il',
'usa',
60007
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.