太奇怪了!!!
我把它改为
qry="insert into GRADE(GRADE_ID,STUDENTS_NO,COURSE_ID) select a.GRADE_ID,a.STUDENTS_NO,a.COURSE_ID from OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="+str+";User ID=Admin;Password=;Extended properties=Excel 5.0')...Sheet1$ as a INNER JOIN GRADE as b ON a.STUDENTS_NO!=b.STUDENTS_NO or a.COURSE_ID!=b.COURSE_ID";
就可以插到数据库中了,,但是每条记录都插入了三次.而且还可以再次插入相同的数据.当然又是每条记录重复了三次..
这是为什么啊?????
高手快显身啊!!!!

解决方案 »

  1.   

    1. 确认你的表联接没有产生重复行
    2. 确认应用程序没有重复执行sql语句
      

  2.   

    1.2.都确定没有.
    我知道原因了..数据库中表GRADE有三条记录,EXCEL表中有两条记录..
    a.STUDENTS_NO!=b.STUDENTS_NO or a.COURSE_ID!=b.COURSE_ID";
    每插入一条EXCEL表记录,就查看一下GRADE表中的记录,由于EXCEL表中的COURSE_ID与GRADE中的三条记录都不相同,所以插入了三次..
    第二次导入就会更多了.我计算了以下,会有21条.果然是的!!!我想要做的是:如果EXCEL表中的记录在数据库GRADE表中存在就插入.
    也就是要满足STUDENTS_NO和COURSE_ID同时不和GRADE中的相同..
    比如:GRADE中有记录   01  ,01
       01,02就可以插入..02,01可以..01,01就不能.
      

  3.   

    大家教我一下,应该怎么做啊???
    是不是要用EXIST??
      

  4.   

    qry="insert into GRADE(GRADE_ID,STUDENTS_NO,COURSE_ID) 
         select a.GRADE_ID
                ,a.STUDENTS_NO
                ,a.COURSE_ID 
         from OpenDataSource( 'Microsoft.Jet.OLEDB.4.0'
                              ,'Data Source="+str+";User ID=Admin;Password=;Extended properties=Excel 5.0')...Sheet1$ as a 
         where not exists(select 1 from GRADE where a.STUDENTS_NO=STUDENTS_NO and a.COURSE_ID=COURSE_ID)";
      

  5.   

    非常感谢你.. vivianfdlpw() ..
    还想问一个问题:如果我要不存在的时候插入,存在的时候更新,那么,语句要怎么写..??
    也就是要加一个分支:
    UPDATE GRADE(GRADE) select GRADE from OpenDataSource( 'Microsoft.Jet.OLEDB.4.0'
                              ,'Data Source="+str+";User ID=Admin;Password=;Extended properties=Excel 5.0')...Sheet1$ 
      

  6.   

    UPDATE GRADE set GRADE.GRADE=a.GRADE from OpenDataSource( 'Microsoft.Jet.OLEDB.4.0'
                              ,'Data Source="+str+";User ID=Admin;Password=;Extended properties=Excel 5.0')...Sheet1$ AS a where  a.STUDENTS_NO=STUDENTS_NO and a.COURSE_ID=COURSE_ID;
      

  7.   

    qry="insert into GRADE(GRADE_ID,STUDENTS_NO,COURSE_ID) 
         select a.GRADE_ID
                ,a.STUDENTS_NO
                ,a.COURSE_ID 
         from OpenDataSource( 'Microsoft.Jet.OLEDB.4.0'
                              ,'Data Source="+str+";User ID=Admin;Password=;Extended properties=Excel 5.0')...Sheet1$ as a 
         where not exists(select 1 from GRADE where a.STUDENTS_NO=STUDENTS_NO and a.COURSE_ID=COURSE_ID)";
    qry=qry+"update t
         set GRADE_ID=a.GRADE_ID
         from GRADE t
         join OpenDataSource( 'Microsoft.Jet.OLEDB.4.0'
                              ,'Data Source="+str+";User ID=Admin;Password=;Extended                            properties=Excel 5.0')...Sheet1$ as a 
         on a.STUDENTS_NO=t.STUDENTS_NO and a.COURSE_ID=t.COURSE_ID)";
      

  8.   

    还问一个问题:
       我在数据库的表中有一个字段AVG,类型为DECIMAL..
       当我没有对其赋值时,数据库中默认为<NULL>.当我赋值以后(在SQL2000中),比如80,然后我把它删除(里面没有任何值),这时如果保存的话,SQL server就会说:输入的值语数据类型不一致..
    这时我可以按"ctr+0"把它设为NULL..
       我想知道的是,在语句中我能不能把AVG赋值为NULL..????
       或者说怎么把它变为NULL....