Comment incrémenter automatiquement INSERT INTO dans SQL Server

J'essaie d'insert des données de la table A à la table B avec la requête

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

Mais j'ai une erreur:

Nom de colonne non valide 'TableAID'.

Voici ma TableA:

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

Et mon tableauB

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

Vous obtenez cette erreur parce que vous select à partir de tableA, qui n'a pas de colonne TableBID. Si je comprends bien, vous essayez d'get le maximum tableBID et l'incrémenter de un pour chaque ligne que vous insérez de tableA, vous pouvez essayer:

 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)) renverra un nombre incrémentiel à partir de 1 pour chaque ligne que vous insérez depuis tableA.

Deux choses que j'ai remarquées. À quoi cela ressemble-t-il? Vous essayez d'insert 5 caractères de données dans une colonne varchar(1) . Peut-être que vous devriez changer la longueur de la colonne ou datatables que vous insérez.

Deuxièmement, vous avez plusieurs colonnes à côté d'une fonction d'agrégation MAX sans utiliser GROUP BY ou OVER .