![](/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.