我准备想数据库中插入大量数据,然后根据数据其中的两个字段(例如:title,tel)来判断,如果有一条数据的两个字段与数据库中的某条数据有重复,则把数据库中的更新时间(updatetime)进行更新。这个要怎么做?

解决方案 »

  1.   

    因为不知道到底使用SQL来做,还是C#来做,所以就发到这里了。如果有解决方案的话,明天结分。
      

  2.   

    IF  (SELECT Count(*) FROM Table WHERE title='@'and tle='@')
    >0
    应该是这样子的,数据库我比较差
      

  3.   

    you can test "Having"such as 
    select title,count (title)
     from Table 
     group by title
    having ( count(title)>1)
      

  4.   

    用当前插入的数据的相应字段查询一下,select count(*) from table where title=插入的值 and tel=插入的值,如果返回大于0,说明已经存在重复;如果等于0,说明不存在重复。用ado.net可以,也可以用sql写(这时就是返回大于1说明重复),不过sql的我不会写。
      

  5.   

    你这题我建议不用修改表中的数据,只要保证新增记录的插入时间为当前时间就可以了(在你的表中加上一列表示插入时间),如果后面的查询需要知道最新的更新时间,你只需要按照插入时间降序排列,然后取出最大值就可以了。之所以这样建议,lz你想想,如果在你的表中现在已经存在10条title和tel相同的记录,现在又新增了一条相同的记录,那么难道你要把前面10条记录的更新时间都改动吗?我想是不用的,你其实需要的就是最后一行记录的插入时间。说白了,最后一行记录的插入时间就是同类数据的更新时间。如果需要知道全部的更新时间,就根据title和tel查出全部数据就可以了
      

  6.   

    两种思路,不知道能不能帮助你:① 就像 4 楼说的那样没插入一条数据的时候做判断,
    IF (SELECT Count(1) FROM Table WHERE title='插入的值' and Name='插入的值' ')>0)
    begin
        update Table set datetimes="新值"
    end
    else
    begin
        insert into table values()
    end
    这样就必须做类似的存储过程,用变量接收单条插入的信息,然后循环插入每一条。②既然是批量插入,那把新的数据先插入一个新表(这里可以是临时表)newTable,然后再从newTable中更新原表oldTable的数据就行了
    我这里模拟字段 id,Title,ProName,CreateDate---更新相同数据的时间
    update oldTable set CreateDate=A.CreateDate from newTable A,oldTable B where B.Title=A.Title and B.ProName=A.ProName 
    ---插入不同数据的记录
    insert into oldTable(Title,ProName,CreateDate) select Title,ProName,CreateDate from newTable A where not exists(select id from oldTable where oldTable.Title= A.Title and oldTable.ProName=A.ProName)---这里必须先执行更新 再执行插入
      

  7.   

    已经找到解决办法,只需要在数据库中写一个存储过程,首先执行更新操作,然后使用@@ROWCOUNT得到受影响的行数,如果行数为0,就执行插入操作。不管怎么说,还是多谢大家了。
      

  8.   

    如果是大量数据建议使用临时表
    1)先将数据存储到临时表中
    2)调用批量更新语句CREATE TABLE Test1(A INT PRIMARY KEY, B NVARCHAR(10));
    INSERT Test1
    SELECT 1, '11' UNION ALL
    SELECT 2, '22' UNION ALL
    SELECT 3, '33';
    CREATE TABLE Test2(A INT PRIMARY KEY, B NVARCHAR(10));
    INSERT Test2;
    SELECT 1, '111' UNION ALL
    SELECT 4, '444' UNION ALL
    SELECT 5, '555';SELECT * FROM test1;
    SELECT * FROM test2;--批量更新
    UPDATE test1
    SET test1.b = test2.b
    FROM test1 INNER JOIN test2 on test1.a = test2.a;
    --批量修改
    INSERT test1
    SELECT test2.*
    FROM test2 LEFT JOIN test1 ON test2.a = test1.a
    WHERE test1.a IS null;
    SELECT * FROM test1;
    SELECT * FROM test2;drop table test1;
    drop table test2;   
    3)……