如何在SQL Server中自动增加INSERT INTO

时间:2017-04-04 01:42:34

标签: sql-server

我尝试使用查询

将表A中的数据插入表B.
INSERT INTO tableB(Status, UserIn, TableBID, Name)
    SELECT 
        'Active',
        UserInput,
        COALESCE(MAX(TableAID),0)+1,
        Name
    FROM 
        tableA

但是我收到了一个错误:

  

列名称无效' TableAID'。

这是我的TableA:

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

我的桌子

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

2 个答案:

答案 0 :(得分:4)

您收到该错误是因为您正在从没有TableBID列的tableA中进行选择。据我所知,你试图获取max 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
对于从tableA插入的每一行,

ROW_NUMBER() OVER (order by (select 1))将从1开始返回递增的数字。

答案 1 :(得分:4)

我发现了两件事。对于Status,您试图将5个字符的数据插入varchar(1)列。也许您应该更改列长度或插入的数据。

其次,您在聚合函数MAX旁边有多列而不使用GROUP BYOVER