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
.