太奇怪了!!!
我把它改为
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";
就可以插到数据库中了,,但是每条记录都插入了三次.而且还可以再次插入相同的数据.当然又是每条记录重复了三次..
这是为什么啊?????
高手快显身啊!!!!
我把它改为
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";
就可以插到数据库中了,,但是每条记录都插入了三次.而且还可以再次插入相同的数据.当然又是每条记录重复了三次..
这是为什么啊?????
高手快显身啊!!!!
2. 确认应用程序没有重复执行sql语句
我知道原因了..数据库中表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就不能.
是不是要用EXIST??
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)";
还想问一个问题:如果我要不存在的时候插入,存在的时候更新,那么,语句要怎么写..??
也就是要加一个分支:
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$
,'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;
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)";
我在数据库的表中有一个字段AVG,类型为DECIMAL..
当我没有对其赋值时,数据库中默认为<NULL>.当我赋值以后(在SQL2000中),比如80,然后我把它删除(里面没有任何值),这时如果保存的话,SQL server就会说:输入的值语数据类型不一致..
这时我可以按"ctr+0"把它设为NULL..
我想知道的是,在语句中我能不能把AVG赋值为NULL..????
或者说怎么把它变为NULL....