我要从一个表中读取name,tel等一些数据,写入另外一个表中,写的时候要判断name字段在在目标表中是否已经存在,如果存在则更新tel字段,如果不存在则写入整个记录,我是这么写的:sSql:='select db1.*,db2.name from db1,db2 where db1.name=db2.name';
With ADOQuery1 do
begin
   Close;
   Sql.Clear;
   Sql.Add(sSql);
   Open;
   while not EOF do
   begin
      //更新数据;
   end;
end;sSql:='select db1.*,db2.name from db1,db2 where db1.name<>db2.name';
With ADOQuery1 do
begin
   Close;
   Sql.Clear;
   Sql.Add(sSql);
   Open;
   while not EOF do
   begin
      //插入数据;
   end;
end;请问这样写符合不符合上面的要求
另外怎么写能提高效率谢谢!

解决方案 »

  1.   

    --TABLE1
    DECLARE @T TABLE(NAME VARCHAR(10),TEL VARCHAR(20))
    INSERT @T SELECT 'AA','345'
    UNION ALL SELECT 'BB','123'
    UNION ALL SELECT 'CC','897'
    ---TABLE2
    DECLARE @T1 TABLE(NAME VARCHAR(10),TEL VARCHAR(20))
    INSERT @T1 SELECT 'AA','345'
    UNION ALL SELECT 'BB','345'
    --判断存在时更新记录IF EXISTS
    (SELECT 1 FROM @T A WHERE EXISTS(SELECT 1 FROM @T1 WHERE NAME=A.NAME))
    UPDATE A
    SET TEL=B.TEL
    FROM @T1 A INNER JOIN @T B
    ON A.NAME=B.NAME
     
    --插入在table1中table2不存在
    INSERT @T1
    SELECT *
    FROM @T A 
    WHERE NOT EXISTS
    (SELECT 1 FROM @T1 WHERE A.NAME=NAME)
    SELECT * FROM @T1
      

  2.   

    现在还有一个问题,更新或者插入时,由于新数据库格式和原来的不一样,需要用一个convertDB()函数对tel字段进行转换,请问如果用二楼的方法,应该如何使用这个函数,谢谢!