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表里有相同的则删除然后再插入,按‘过秤时间’字段判断。谢谢大家
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表里有相同的则删除然后再插入,按‘过秤时间’字段判断。谢谢大家
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
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我改成上述是否正确,我试了试还是不成
过秤时间 datetime 8 主键
序号 int 4 主键
车号 varchar 50
.....
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
scalemiskq.dbo.scaledata
scalemis.dbo.scaledata
这几个表是在不同的数据库里面么?你现在的datacopy_S 这个存储过程保留还是不要了做个新的你说的那个意思 scalemiskq.dbo.scaledata
scalemis.dbo.scaledata
这2个数据库表里面的内容就不改了么?
我不太明白SQl2000以及上述触发器
上面的触发器是数据库scalemis中scaledata表里的
我只是知道当我为数据库scalemis中的scaledata表里写数的时候,触发器会同时更新数据库scalemiskq中表scaledata和数据库scalemisKS_W中表scaledata里的表的记录,更新完后会删除数据库scalemis中scaledata表里的数据,
现在的问题是如果向数据库scalemis写入的值和数据库scalemiskq中表scaledata和数据库scalemisKS_W中表scaledata里的值相同,则触发器发生错误,不能重复插入,要求在触发器里先删除再更新
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
也就是说假如我向数据库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里写入最后一条记录我是想全部写入,如有重复的则删除所有重复再全部更新
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