CREATE TRIGGER datacopy_S ON [dbo].[scaledata] 
FOR INSERT, UPDATE
ASinsert into scalemisKS_W.dbo.scaledata select * from inserted
update scalemisKS_W.dbo.scaledata
set 过秤时间=convert(NVARCHAR(25),过秤时间,120)insert into scalemiskq.dbo.scaledata select * from inserted
update scalemiskq.dbo.scaledata
set 过秤时间=convert(NVARCHAR(25),过秤时间,120)delete from scalemis.dbo.scaledata select * from inserted大家好,以上是别人编的触发器,当scaledata表里有数据时则同时更新scalemisKS_W表然后删除scalemis表的数据
我没学过SQl2000也没用过触发器,求帮忙修改为当scaledata表里有数据插入时,先判断插入的数是否和scalemisKS_w表里的数相同,如果scalemisKS_w表里有相同的则删除然后再插入,按‘过秤时间’字段判断。谢谢大家

解决方案 »

  1.   


    CREATE TRIGGER datacopy_S ON [dbo].[scaledata]  
    FOR INSERT, UPDATE
    ASif exists(select top 1 0 from scalemisKS_W.dbo.scaledata a,inserted b where a.id=b.id)
    begin
        insert into scalemisKS_W.dbo.scaledata select * from inserted
        update scalemisKS_W.dbo.scaledata
        set 过秤时间=convert(NVARCHAR(25),过秤时间,120)
    endinsert into scalemiskq.dbo.scaledata select * from inserted
    update scalemiskq.dbo.scaledata
    set 过秤时间=convert(NVARCHAR(25),过秤时间,120)delete from scalemis.dbo.scaledata select * from inserted
      

  2.   

    CREATE TRIGGER datacopy_W ON [dbo].[waggondata] 
    FOR INSERT, UPDATE
    AS
    if exists(select top 1 0 from scalemisKS_W.dbo.waggondata a,inserted b where a.过秤时间=b.过秤时间)
    insert into scalemisKS_W.dbo.waggondata select * from inserted
    update scalemisKS_W.dbo.waggondata
    set 过秤时间=convert(NVARCHAR(25),过秤时间,120)
    if exists(select top 1 0 from scalemisKS_W.dbo.waggondata a,inserted b where a.过秤时间=b.过秤时间)
    begin
    insert into scalemiskq.dbo.waggondata select * from inserted
    update scalemiskq.dbo.waggondata
    set 过秤时间=convert(NVARCHAR(25),过秤时间,120)
    end
    delete from scalemis.dbo.waggondata select * from inserted请问id我改成上述是否正确,我试了试还是不成
      

  3.   

    表结构是
    过秤时间    datetime  8   主键
    序号         int     4    主键
    车号         varchar 50
    .....
      

  4.   

    CREATE TRIGGER datacopy_S ON [dbo].[scaledata]  
    FOR INSERT, UPDATE
    ASinsert into scalemisKS_W.dbo.scaledata select * from inserted
    update scalemisKS_W.dbo.scaledata
    set 过秤时间=convert(NVARCHAR(25),过秤时间,120)insert into scalemiskq.dbo.scaledata select * from inserted
    update scalemiskq.dbo.scaledata
    set 过秤时间=convert(NVARCHAR(25),过秤时间,120)delete from scalemis.dbo.scaledata select * from inserted大家好,以上是别人编的触发器,当scaledata表里有数据时则同时更新scalemisKS_W表然后删除scalemis表的数据
    我没学过SQl2000也没用过触发器,求帮忙修改为当scaledata表里有数据插入时,先判断插入的数是否和scalemisKS_w表里的数相同,如果scalemisKS_w表里有相同的则删除scalemisKS_w表里相同的数然后再插入,按‘过秤时间’字段判断。谢谢大家,scalemiskq表更新和scalemisKS_W更新方法相同。????????????????????? 
     
     
     
    对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 回复次数:5  
      

  5.   

    不知道楼主的[dbo].[scaledata]  scalemisKS_W.dbo.scaledata
    scalemiskq.dbo.scaledata
    scalemis.dbo.scaledata 
    这几个表是在不同的数据库里面么?你现在的datacopy_S 这个存储过程保留还是不要了做个新的你说的那个意思 scalemiskq.dbo.scaledata
    scalemis.dbo.scaledata 
    这2个数据库表里面的内容就不改了么?
      

  6.   

    三个表在不同的数据库里面
    我不太明白SQl2000以及上述触发器
    上面的触发器是数据库scalemis中scaledata表里的
    我只是知道当我为数据库scalemis中的scaledata表里写数的时候,触发器会同时更新数据库scalemiskq中表scaledata和数据库scalemisKS_W中表scaledata里的表的记录,更新完后会删除数据库scalemis中scaledata表里的数据,
    现在的问题是如果向数据库scalemis写入的值和数据库scalemiskq中表scaledata和数据库scalemisKS_W中表scaledata里的值相同,则触发器发生错误,不能重复插入,要求在触发器里先删除再更新
      

  7.   

    CREATE TRIGGER datacopy_S
     ON [dbo].[scaledata]  
    FOR INSERT, UPDATE
    AS
    declare @过秤时间 datetime 
    select @过秤时间=过秤时间 from inserted
    if exists(select * from scalemisKS_W.dbo.scaledata where 过秤时间=convert(NVARCHAR(25),@过秤时间,120))
    begin
    delete from scalemisKS_W.dbo.scaledata where 过秤时间=convert(NVARCHAR(25),@过秤时间,120)
    insert into scalemisKS_W.dbo.scaledata select * from inserted
    update scalemisKS_W.dbo.scaledata
    set 过秤时间=convert(NVARCHAR(25),过秤时间,120)
    end
    else
    begin
    insert into scalemisKS_W.dbo.scaledata select * from inserted
    update scalemisKS_W.dbo.scaledata
    set 过秤时间=convert(NVARCHAR(25),过秤时间,120)
    endif exists(select * from scalemiskq.dbo.scaledata where 过秤时间=convert(NVARCHAR(25),@过秤时间,120))
    begin
    delete from scalemiskq.dbo.scaledata where 过秤时间=convert(NVARCHAR(25),@过秤时间,120)
    insert into scalemiskq.dbo.scaledata select * from inserted
    update scalemiskq.dbo.scaledata
    set 过秤时间=convert(NVARCHAR(25),过秤时间,120)
    end
    else
    begin
    insert into scalemiskq.dbo.scaledata select * from inserted
    update scalemiskq.dbo.scaledata
    set 过秤时间=convert(NVARCHAR(25),过秤时间,120)
    end
    delete from scalemis.dbo.scaledata select * from inserted
      

  8.   

    是这样的
    也就是说假如我向数据库scalemis中的scaledata表写入如下数据
    2006-11-3 19:37:26 1 1558522 C70  
    2006-11-3 19:37:26 2 1564117 C70  
    2006-11-3 19:37:26 3 1551279 C70  
    2006-11-3 19:37:26 4 1551922 C70  
    2006-11-3 19:37:26 5 1500008 C70H 
    2006-11-3 19:37:26 6 1558526 C70  
    但是触发器只能向数据库scalemiskq中表scaledata和数据库scalemisKS_W中表scaledata里写入最后一条记录我是想全部写入,如有重复的则删除所有重复再全部更新
      

  9.   

    刚那个程序错了我改了下
    CREATE TRIGGER datacopy_S
     ON [dbo].[scaledata]  
    FOR INSERT, UPDATE
    AS
    if exists(select * from scalemisKS_W.dbo.scaledata a,inserted b where a.过秤时间=convert(NVARCHAR(25),b.过秤时间,120))
    begin
    delete from scalemisKS_W.dbo.scaledata where 过秤时间 in(select a.过称时间 from scalemisKS_W.dbo.scaledata a,inserted b where a.过秤时间=convert(NVARCHAR(25),b.过秤时间,120))
    insert into scalemisKS_W.dbo.scaledata select * from inserted
    update scalemisKS_W.dbo.scaledata
    set 过秤时间=convert(NVARCHAR(25),过秤时间,120)
    end
    else
    begin
    insert into scalemisKS_W.dbo.scaledata select * from inserted
    update scalemisKS_W.dbo.scaledata
    set 过秤时间=convert(NVARCHAR(25),过秤时间,120)
    endif exists(select * from scalemiskq.dbo.scaledata a,inserted b where a.过秤时间=convert(NVARCHAR(25),b.过秤时间,120))
    begin
    delete from scalemiskq.dbo.scaledata where 过秤时间 in(select a.过称时间 from scalemiskq.dbo.scaledata a,inserted b where a.过秤时间=convert(NVARCHAR(25),b.过秤时间,120))
    insert into scalemiskq.dbo.scaledata select * from inserted
    update scalemiskq.dbo.scaledata
    set 过秤时间=convert(NVARCHAR(25),过秤时间,120)
    end
    else
    begin
    insert into scalemiskq.dbo.scaledata select * from inserted
    update scalemiskq.dbo.scaledata
    set 过秤时间=convert(NVARCHAR(25),过秤时间,120)
    end
    delete from scalemis.dbo.scaledata select * from inserted