我这里现在已经知道的是表中有百万条数据,在向表中插入新数据之前根据时间和另外一个外键检查是否存在数据,如果存在有关数据则更新有关值,没有的话直接插入。
   我现在用的是IF EXISTS 先检查一下,如果存在就更新,不存在的话添加数据,这样的速度太慢,有哪位大侠提一下建议。

解决方案 »

  1.   

    我用的是SQL Server,我大概看了一下这个好像是相对于Oracle的!!!
      

  2.   

    可以用@@ROWCOUNT来判断UPDATE TAB SET ...
    WHERE 时间= ...
    AND 另外一个外键 = ...IF @@ROWCOUNT <= 0
       INSERT TAB (...)
       VALUES (...) 这样,减少一次查询,也减少被锁机会
      

  3.   

    没有明白您的意思,假如我需要插入的数据在临时表A中,现在我象插入到B表中,该怎么弄呢?(注:现在我知道的是B表中已经有百万数据,A表中有n(n>=1)条数据),这样的话该怎么弄呢?
      

  4.   

    插入:
    insert into B
    select ...
    from A t
    where not exists (select 1 from B where [] = t.[])
    更新
    update b
    set b.[] = a.[]
    from A a join B b on a.[] = b.[]
      

  5.   

    用临时表,
    将要插入的表数据生成Hash tabl,提取对比表的数据也生成HASH TABLE
    两表相比,用差量更新
      

  6.   

    如果只是更新效率如何?update b
    set b.[] = a.[]
    from A a join B b on a.[] = b.[]这样子。
      

  7.   


    ALTER PROCEDURE [dbo].[sp_Service_OperationScript_UpdateOperationScriptById]
    @OperationScriptId char(36),
    @OperationScriptActualBeginTime datetime=null,
    @OperationScriptActualEndTime datetime=null,
    @OperationScriptState int=null,
    @OperationScriptWarningInfo nvarchar(MAX)=nullAS
    BEGIN
    SET NOCOUNT ON
    UPDATE Service_OperationScript
    SET
    OperationScriptActualBeginTime=ISNULL(@OperationScriptActualBeginTime,OperationScriptActualBeginTime), 
    OperationScriptActualEndTime=ISNULL(@OperationScriptActualEndTime,OperationScriptActualEndTime), 
    OperationScriptState=ISNULL(@OperationScriptState,OperationScriptState), 
    OperationScriptWarningInfo=ISNULL(@OperationScriptWarningInfo,OperationScriptWarningInfo)
    WHERE
    OperationScriptId = @OperationScriptId
    END这是我这边写的存储过程,现在是百万级数据,有的时候就会出现超时问题!