if exists(select count(*) from tb a,inserted b where a.l_xay=b.l_xay)
     --存在
else 
    --不存在

解决方案 »

  1.   

    有一个问题,效率上可以不行,当遇到数据量太大时(例如L_DAYLOG表中有10万条记录),速度可以会很慢,是否有办法可以优化一下呢?还请指教!
      

  2.   

    按LIANGCK的方法,最后得出:
    CREATE TRIGGER c_intect  ON [dbo].[L_DAYLOG] 
    instead of  INSERT
    AS
    SET NOCOUNT ON
    insert    L_DAYLOG(ID,L_XAY,L_NAME)   
      select ID,L_XAY,L_NAME from inserted 
      where not exists(   
      select 1 from L_DAYLOG, inserted     
      where L_DAYLOG.L_XAY=inserted.L_XAY)
                              
    SET NOCOUNT OFF现在就是要考虑速度的问题,有高见吗?
      

  3.   

    L_XAY   varchar(10)--主键值
    新增或修改保存时检查L_XAY是否有重复的值?
    -------------------------------------
    什么情况?
      

  4.   

    回wzy_love_sly    
     
    ID   L_XAY     L_NAME
    001   FH0024    王五
    002   FH0142    李四
    003   AZ0432    王五
    004   LA0478    李四
     
      

  5.   

    有一表   L_DAYLOG 
    字段类型: 
    ID   INT 
    L_XAY   varchar(10)--主键值 
    L_NAME   varchar(5) 要求写一触发器,在用户新增或修改保存时检查L_XAY是否有重复的值,没有时将数据写入表,有时放弃写入数据ID       L_XAY           L_NAME 
    001       FH0024         王五 
    002       FH0142         李四 
    003       AZ0432         王五 
    004       LA0478         李四 
    ------------------------------写个例子create trigger Tr_L_DAYLOG on L_DAYLOG
    instead of insert, update
    asif not update(L_XAY)--没有更新L_XAY列时不触发下面语句
    return 
    if not exists(select 1 from deleted )--判断新增操作
    insert L_DAYLOG 
    select 
    *
    from 
    inserted i
    where
    not exists(select 1 from L_DAYLOG where L_XAY=i.L_XAY)
    else --其它更新
    update l
    set L_XAY=i.L_XAY
    from 
    inserted i
    join
    L_DAYLOG l on i.ID=l.ID
    where
    not exists(select 1 from L_DAYLOG where L_XAY=i.L_XAY)
      

  6.   

    先多谢roy_88的热心帮忙,本来是想用触发器处理,无奈在插入大量记录时,速度实在不行,既然roy_88说可以用储过程处理,还请多多指教,无限感激!
      

  7.   

    无奈在插入大量记录时,速度实在不行,既然roy_88说可以用储过程处理,还请多多指教,无限感激!
    -------------
    楼主是通过怎样的方式插入记录?
    if not update(L_XAY)--去掉
    刚测了一个:
    create table L_DAYLOG(ID char(3) ,L_XAY varchar(10),         L_NAME varchar(5))insert L_DAYLOG values('001',       'FH0024',         '王五') 
    insert L_DAYLOG values('002',       'FH0142',         '李四')
    insert L_DAYLOG values('003',       'AZ0432',         '王五')
    insert L_DAYLOG values('004',       'LA0478',         '李四') 
    goif object_id('Tr_L_DAYLOG','TR') is not null
    drop trigger Tr_L_DAYLOG
    go
    create trigger Tr_L_DAYLOG on L_DAYLOG
    instead of insert, update
    asif not exists(select 1 from deleted )--判断新增操作
    insert L_DAYLOG 
    select 
    *
    from 
    inserted i
    where
    not exists(select 1 from L_DAYLOG where L_XAY=i.L_XAY)
    else 

    update l
    set L_XAY=i.L_XAY
    from 
    inserted i
    join
    L_DAYLOG l on i.ID=l.ID
    where
    not exists(select 1 from L_DAYLOG where L_XAY=i.L_XAY)
    go
    --测试新增
    insert L_DAYLOG values('005',       'LA0478',         '李四') select * from L_DAYLOG--查看数据没变化
    /*
    ID   L_XAY      L_NAME 
    ---- ---------- ------ 
    001  FH0024     王五
    002  FH0142     李四
    003  AZ0432     王五
    004  LA0478     李四(所影响的行数为 4 行)
    */insert L_DAYLOG values('005',       'LA0008',         '李四') --改一下L_XAYgo
    select * from L_DAYLOG
    /*
    ID   L_XAY      L_NAME 
    ---- ---------- ------ 
    001  FH0024     王五
    002  FH0142     李四
    003  AZ0432     王五
    004  LA0478     李四
    005  LA0008     李四(所影响的行数为 5 行)
    */--测式更新
    update L_DAYLOG
    set L_XAY='LAA0478'--不存在
    where
    L_XAY='LA0478'update L_DAYLOG
    set L_XAY='FH0024'--存在
    where
    L_XAY='AZ0432'select * from L_DAYLOG/*
    ID   L_XAY      L_NAME 
    ---- ---------- ------ 
    001  FH0024     王五
    002  FH0142     李四
    003  AZ0432     王五
    004  LAA0478    李四
    005  LA0008     李四
    */
      

  8.   

    如果是已知新增数据..
    方式是一条一条的insert values
    还是insert select
      

  9.   

    是insert   values