请问这种数据操作如何做效率比较高

amartapple 2006-09-02 10:38:27
我要从一个表中读取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;

请问这样写符合不符合上面的要求
另外怎么写能提高效率

谢谢!
...全文
168 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
amartapple 2006-09-03
  • 打赏
  • 举报
回复
那那个函数如何使用呢
lwk_hlj 2006-09-02
  • 打赏
  • 举报
回复
来晚了,上面说的比较好!
liangpei2008 2006-09-02
  • 打赏
  • 举报
回复
您的方法可以实现!不过数据量大时会慢一些!
liangpei2008 2006-09-02
  • 打赏
  • 举报
回复
--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
fireflyc 2006-09-02
  • 打赏
  • 举报
回复
来晚了。
按2楼的,把它写成个存储过程的好。
amartapple 2006-09-02
  • 打赏
  • 举报
回复
现在还有一个问题,更新或者插入时,由于新数据库格式和原来的不一样,需要用一个convertDB()函数对tel字段进行转换,请问如果用二楼的方法,应该如何使用这个函数,谢谢!

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧