请教一个sql问题

[复制链接]
查看11 | 回复1 | 2005-2-28 12:57:00 | 显示全部楼层 |阅读模式
两个表 rskp(人事卡片表)和bx(保险表)
rskp为员工的基本信息,包括工号bxh,工作部门gzbm,工作班组gzbz,出生日期,入厂日期等。
bx为员工的保险信息,包括工号bxh,工作部门gzbm,工作班组gzbz,保险金额等。
两个表的key均为bxh。
bx表的数据是先从rskp中取出工号bxh,工作部门gzbm,工作班组gzbz,然后添加保险金额。
当有新员工入厂,会在rskp中自动添加员工信息,但是bx中没有添加,所以需要对比两个表,将bx表中没有的员工添加进来。
我用的是游标,可是怎么写都不对。
---------------------------------------------
declare @bxhbz char(6),@bxhkp char(6),@maxbxhkp char(6),@maxbxhbz char(6)
select @maxbxhbz=max(bxh) from bx
select @maxbxhkp=max(bxh) from rscard.dbo.yx_rskp
declareqnbzaddnew cursor
for select bxh from bx order by bxh
declarerskpnew cursor
for select bxh from rscard.dbo.yx_rskp order by bxh
open rskpnew
fetch next from rskpnew into @bxhkp
while @@fetch_status-1
begin
open qnbzaddnew
fetch next from qnbzaddnew into @bxhbz
while @@fetch_status-1
begin
while @bxhkp@bxhbz

begin

if @bxhkp=@bxhbz

break

if @bxhbz=@maxbxhbz

begin

insert bx(bxh,gzbm) select a.bxh,b.gzbm from rscard.dbo.yx_rskp b where b.bxh=@bxhkp

end
end
fetch next from qnbzaddnew into @bxhbz
end
close qnbzaddnew
fetch next from rskpnew into @bxhkp
end
deallocate qnbzaddnew
close rskpnew
deallocate rskpnew
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
你的语法是SQL SERVER的。
对于历史遗留问题,
insert bx(bxh,gzbm)
select b.bxh,b.gzbm from yx_rskp b
minus
select bxh,gzbm from bx;
新的记录写个TRIGGER就可以了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行