I have 3 tables:
- Server_db_relation
- DatabaseList
- DatabaseList_Archive
The goal is to compare table Server_db_relation
and DatabaseList
based on the values in column ServerName
and DatabaseName
. If the values do not exists in the table Server_db_relation
, but do exist in DatabaseList
, then it should insert the entire row from DatabaseList
into DataList_Archive
(those two tables are identical in structure).
In addition, if possible ones the row has been inserted to DatabaseList_Archive
then delete the record from DatabaseList
.
INSERT INTO DatabaseList_Archieve (Column1, Column2 )
SELECT *
FROM DatabaseList
WHERE NOT EXISTS (SELECT 1
FROM DabaseList, Server_db_relation
WHERE DatabaseList.ServerName = Server_db_relation.ServerName
AND DatabaseList.DatabaseName = Server_db_relatio.[Database])
I do not get any syntax errors but no rows are affected. I have added 2 test rows that I know exist in DatabaseList
and not in Server_db_relation
.
Advertisement
Answer
You need correlate the sub-query :
INSERT INTO DatabaseList_Archieve (Column1, Column2 )
SELECT dbl.col1, dbl.col2, . .
FROM DatabaseList dbl
WHERE NOT EXISTS(SELECT 1
FROM Server_db_relation sdb
WHERE dbl.ServerName = sdb.ServerName AND
dbl.DatabaseName = sdb.[Database]
);
Note : I have declared the table alias to make the query easy to ready & write column name or table name (where it comes from).