例如,如果我在 SQL Server 中有這兩個表:
Table 1 || Table 2
--------------------------||----------------------------
Number | Name || Number | Name
--------------|-----------|| --------------|------------
1 | B || 1 | A
2 | C || |
我想要做的是將表 1 中的條目插入到表 2,但我希望表 2 自動增加數字。所以我希望它變成這樣:
Table 2 ||
--------------------------||
Number | Name ||
--------------|-----------||
1 | A ||
2 | B ||
3 | C ||
我試過這樣的查詢,但沒有用:
Insert into table2 (Number, Name)
select
(select max(number) 1 from table1), Name
from table1
也許你會建議在 table2 主鍵中創建數字,但我想使用像上面查詢那樣的最大數字來做。
提前致謝。
uj5u.com熱心網友回復:
Table2.Number 應該是IDENTITY. 然后,您可以將表 1 中的名稱插入到表 2 中。
create table table2(number int not null identity(1,1), name char(1));
insert into table2 values ('A');
insert into table2 select name from table1;
小提琴
uj5u.com熱心網友回復:
這可能有點太簡單了,也許您正在尋找更復雜的東西,但是......
INSERT INTO Table2 (Number, Name)
SELECT
T.Number X.MaxRowNumber
,T.Name
FROM Table1 T
INNER JOIN (SELECT MAX(Number) AS MaxRowNumber FROM Table2) X
ON 1 = 1
;
這種方法基于您的陳述:
也許你會建議在 table2 主鍵中創建數字,但我想使用像上面查詢那樣的最大數字來做。
我從這里了解到您不想將 Table2.Number 設定為 IDENTITY 列,而是在 INSERT 操作期間執行自動增量。
我傾向于同意其他答案,說 Table2.Number 應該是 IDENTITY 列,因此無需計算即可自動遞增,但如果這不是您想要的,那么這個答案應該對您有所幫助。
您可以使用帶有真實資料的表變數對此進行測驗,以確保它是您要查找的內容:
DECLARE @TABLE1 AS TABLE (Number INT, Name CHAR(1));
DECLARE @TABLE2 AS TABLE (Number INT, Name CHAR(1));
INSERT INTO @TABLE1 (Number, Name) VALUES ('1','B'), ('2','C');
INSERT INTO @TABLE2 (Number, Name) VALUES ('1','A');
INSERT INTO @TABLE2 (Number, Name)
SELECT
T.Number X.MaxRowNumber
,T.Name
FROM @TABLE1 T
CROSS APPLY (SELECT MAX(Number) AS MaxRowNumber FROM @TABLE2) X
;
SELECT * FROM @TABLE2
;
uj5u.com熱心網友回復:
您將需要使用如下所示的 INSERT INTO SELECT 語法來實作此目的。
INSERT INTO table2
SELECT MAX(Number) 1,
Name
FROM Table1
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/385358.html
標籤:sql sql-server 插入
