2017-04-04 122 views
1

我試圖從表中的數據與查詢我如何自動增量INSERT INTO在SQL Server

INSERT INTO tableB(Status, UserIn, TableBID, Name) 
    SELECT 
     'Active', 
     UserInput, 
     COALESCE(MAX(TableAID),0)+1, 
     Name 
    FROM 
     tableA 

插入到表B,而得到一個錯誤:

Invalid column name 'TableAID'.

這裏我表A :

CREATE TABLE TableA 
(
    Status VARCHAR(10), 
    UserInput VARCHAR(25), 
    TableAID INT, 
    Name VARCHAR(32) 
) 

而且我tableB的

CREATE TABLE TableB 
(
    Status VARCHAR(1), 
    UserIn VARCHAR(25), 
    TableBID INT, 
    Name VARCHAR(32) 
) 
+0

你可以提供表A的DDL嗎? – streetturtle

+0

編輯問題@streetturtle –

+0

你想具體做什麼? –

回答

4

您正在收到該錯誤,因爲您正在從tableA中選擇,而tableA沒有TableBID列。據我所知,你正試圖獲得最大tableBID和一個你從TableA中插入每一行增加它,你可以嘗試:

INSERT INTO tableB(Status,UserIn,TableBID,Name) 
SELECT 
'Active', 
UserInput, 
ROW_NUMBER() OVER (order by (select 1))+ (SELECT COALESCE(MAX(TableBID),0) FROM tableB), 
Name 
FROM 
tableA 

ROW_NUMBER() OVER (order by (select 1))將返回從1開始的遞增數爲要插入的每一行來自tableA。

+0

我已經編輯過這個問題。但這個答案是可以接受的!感謝您的回覆! –

+1

通常的做法是在目標表中創建一個「標識」列,但這肯定是充足的,只要您不運行查詢兩次。 –

4

我注意到了兩件事。其中一個看起來像是Status,您試圖將5個字符的數據插入到varchar(1)列中。也許你應該改變列長度或你插入的數據。

其次,除了聚合函數MAX之外,還有多個列,而不使用GROUP BYOVER

+0

謝謝你糾正我,謝謝你的建議...... :) –