从一个表查询数据插入到另一个表的有关问题

从一个表查询数据插入到另一个表的问题
有俩表,字段id是主键,类似表A有字段 id, val1, val2, val3, other1,表B有字段 id, val1, val2 ,val3, Num,中间的字段都一样,就最后两个不同。其中表AB的id、Num字段都是int型,表A的id为自增。
然后Delphi7里执行以下代码:

var str: string;
begin
//.....
    str := 'INSERT INTO B (Num, val1, val2, val3) SELECT id, val1, val2, val3 FROM A WHERE id = (' +
              + 'SELECT Max(id) FROM A)';
    with adoQry1 do
    begin
      Close;
      SQL.Clear;
      SQL.Add(str);
      ExecSQL;
      Close;
    end;
//.....
end;

或者这样:

var 
  str: string;
  maxID: Integer;
begin
//.....
    maxID := adoQry.FiledByName('id').AsInteger;
    str := 'INSERT INTO B (Num, val1, val2, val3)  SELECT id, val1, val2, val3 FROM A WHERE id = ' + IntToStr(maxID);
    with adoQry1 do
    begin
      Close;
      SQL.Clear;
      SQL.Add(str);
      ExecSQL;
      Close;
    end;
//.....
end;

下断点调试的的时候,执行到SQL语句都提示'id‘字段无效,我删除字符串里的id,又提示下一个字段无效,依次类推,结果始终不能讲表A中的数据插入到表B中,但程序运行的没有任何错误提示,只有debug的时候才发现SQL语句执行不过去。
但我在SQL SERVER 2008里执行
INSERT INTO B (Num, val1, val2, val3) SELECT id, val1, val2, val3 FROM A WHERE id = (SELECT Max(id) FROM A)
又完全没有问题,数据被成功更新了。
请问这是怎么回事,Delphi里改如何解决?谢谢!

------解决思路----------------------
还有一点,字段不能为空的必须有值,自增字段不需要
------解决思路----------------------
没怎么做过数据库,不过看楼主的sql语句应该没什么问题,难道是版本的问题?另:完全不知道1楼在讲什么