CREATE procedure JW_ResCj
@cl_Code char(10),
@YE_Year char(10),
@YE_Num  char(10)
as
declare @sql varchar(8000)insert into 
jw_res(JW_RESstnum,JW_RESstname,JW_REScj,JW_RESinsname,JW_RESinscode,
JW_RESinsxz,JW_RESstfy,JW_RESstnj,JW_RESstxz,JW_RESinclcode,JW_RESstcolcode,
JW_RESinthcode,JW_RESinyeyear,JW_RESinyenum,JW_RESinclname,JW_RESstcolname)
select  
_st.jw_stnum,_st.jw_stname,0 as jw_rescj, _in.jw_insubname,_in.jw_insubcode,
_in.jw_insubxz,_st.jw_stfy,_st.jw_stxn,_st.jw_stxz,_st.jw_stclcode,_st.jw_stcolcode,
_in.jw_inthcode,_in.jw_inyeyear,_in.jw_inyenum,_in.jw_inclname,_st.jw_stcolname
from jw_st _st
inner join jw_in _in on _in.jw_inclcode=_st.jw_stclcodewhere _in.jw_inclcode=+@cl_Code and _in.jw_inyeyear=+@YE_Year and _in.jw_inyenum=+@YE_Num
and _st.jw_stxn=_in.jw_innj
exec(@sql)
GO这个是存储过程,批量添加,是3个表之间的.
数据量30W左右,每次插入数据300-1000条不等,
如何限制重复添加?

解决方案 »

  1.   

    CREATE procedure JW_ResCj
    @cl_Code char(10),
    @YE_Year char(10),
    @YE_Num  char(10)
    as
    declare @sql varchar(8000)SELECT @sql='
    insert into 
    jw_res(JW_RESstnum,JW_RESstname,JW_REScj,JW_RESinsname,JW_RESinscode,
    JW_RESinsxz,JW_RESstfy,JW_RESstnj,JW_RESstxz,JW_RESinclcode,JW_RESstcolcode,
    JW_RESinthcode,JW_RESinyeyear,JW_RESinyenum,JW_RESinclname,JW_RESstcolname)
    select  
    _st.jw_stnum,_st.jw_stname,0 as jw_rescj, _in.jw_insubname,_in.jw_insubcode,
    _in.jw_insubxz,_st.jw_stfy,_st.jw_stxn,_st.jw_stxz,_st.jw_stclcode,_st.jw_stcolcode,
    _in.jw_inthcode,_in.jw_inyeyear,_in.jw_inyenum,_in.jw_inclname,_st.jw_stcolname
    from jw_st _st
    inner join jw_in _in on _in.jw_inclcode=_st.jw_stclcodewhere _in.jw_inclcode='+@cl_Code + ' and _in.jw_inyeyear='+@YE_Year +' and _in.jw_inyenum='+@YE_Num +'
    and _st.jw_stxn=_in.jw_innj'
    exec(@sql)
    GO
      

  2.   

    以下是我的理解:
    如果是处理在同一次插入中出现的重复记录:直接对SELECT处理即可
    如果是要插入的SELECT记录不能和数据表已有的记录重复:
    用SELECT记录和数据表记录对比,过滤出待插入的数据记录即可
      

  3.   

    这个insert是从ST表里取学生数据,然后从已经写好的IN表里取本学期的科目信息的集合,然后对应学生表的班级,进行每个班级的所有科目批量插入,取了4个条件,但是插入的时候不仅仅是4个条件,RES表有10多个字段,insert的内容,都是从其他表直接拿过来进行组合的,估计你没考虑到这点,刚才我修改的了存储过程,一样可以重复插入~~