SQL Server数据库触发器问题
两个条件:1.表A(A1,A2),B(B1,B2,B3),C(C1,C2),当跟新A表时,若A1字段改为1,为BB库中的C表插入数据,若A1字段改为2,为BB库中的B表插...
两个条件:
1.表A(A1,A2),B(B1,B2,B3),C(C1,C2),当跟新A表时,若A1字段改为1,为BB库中的C表插入数据,若A1字段改为2,为BB库中的B表插入数据。
2.每次操作前,检查B表,如果数据条数超过100,删除B表数据
下面是第一个条件要求的触发器,怎么把第二个条件整合进去,一个触发器能完成吗?在线等啊
create trigger trigger1 on A
for update
as
declare @A1 bigint
set @A1 = 0
if update(A1)
begin
select @A1=A1 from inserted
if @A1= 2
begin
insert into [BB]..B(B2,B3)
select A2,getdate() from inserted
end;
if @flag= 1
begin
insert into [BB]..C(C1)
select A2 from inserted
end;
end; 展开
1.表A(A1,A2),B(B1,B2,B3),C(C1,C2),当跟新A表时,若A1字段改为1,为BB库中的C表插入数据,若A1字段改为2,为BB库中的B表插入数据。
2.每次操作前,检查B表,如果数据条数超过100,删除B表数据
下面是第一个条件要求的触发器,怎么把第二个条件整合进去,一个触发器能完成吗?在线等啊
create trigger trigger1 on A
for update
as
declare @A1 bigint
set @A1 = 0
if update(A1)
begin
select @A1=A1 from inserted
if @A1= 2
begin
insert into [BB]..B(B2,B3)
select A2,getdate() from inserted
end;
if @flag= 1
begin
insert into [BB]..C(C1)
select A2 from inserted
end;
end; 展开
2个回答
展开全部
CREATE TRIGGER trigger1 ON zw_bkd
WITH EXECUTE AS CALLER
AFTER UPDATE
AS
BEGIN
declare @oldshr int,@newshr int, @gsdm int,@kjnd int,@je int,@zbid int
--这里视你的情况修改变量类型
if update(shr)
begin
select @oldshr=Deleted.shr from Deleted --@oldshr是更新前的shr
select @newshr=Inserted.shr, --@newshr是更新后的shr
@gsdm=Inserted.gsdm,@kjnd=Inserted.kjnd,
@je=Inserted.je,@zbid=Inserted.zbid
from Inserted
if @oldshr is null and @newshr is not null --如果shr从空变为非空
begin
--如果zw_ed 中存在zbid与zw_bkd相同的行,删除这些行
if (select count(*) from zw_ed where zw_ed.zbid=@zbid)!=0
delete from zw_ed where zw_ed.zbid=@zbid
--将zw_bkd里的gsdm,kjnd,je,zbid插入到zw_ed表里
insert into zw_ed (gsdm,kjnd,je,zbid) values (@gsdm,@kjnd,@je,@zbid)
end
else if @oldshr is not null and @newshr is null --如果shr从非空变为空
begin
--删除zw_ed 中zbid与zw_bkd相同的行
delete from zw_ed where zw_ed.zbid=@zbid
end
end
END
WITH EXECUTE AS CALLER
AFTER UPDATE
AS
BEGIN
declare @oldshr int,@newshr int, @gsdm int,@kjnd int,@je int,@zbid int
--这里视你的情况修改变量类型
if update(shr)
begin
select @oldshr=Deleted.shr from Deleted --@oldshr是更新前的shr
select @newshr=Inserted.shr, --@newshr是更新后的shr
@gsdm=Inserted.gsdm,@kjnd=Inserted.kjnd,
@je=Inserted.je,@zbid=Inserted.zbid
from Inserted
if @oldshr is null and @newshr is not null --如果shr从空变为非空
begin
--如果zw_ed 中存在zbid与zw_bkd相同的行,删除这些行
if (select count(*) from zw_ed where zw_ed.zbid=@zbid)!=0
delete from zw_ed where zw_ed.zbid=@zbid
--将zw_bkd里的gsdm,kjnd,je,zbid插入到zw_ed表里
insert into zw_ed (gsdm,kjnd,je,zbid) values (@gsdm,@kjnd,@je,@zbid)
end
else if @oldshr is not null and @newshr is null --如果shr从非空变为空
begin
--删除zw_ed 中zbid与zw_bkd相同的行
delete from zw_ed where zw_ed.zbid=@zbid
end
end
END
追问
@oldshr is null and @newshr is not null,这句话能直接换成if (select count(*) from B)>=100吗,我直接写在我上面那个触发器里面不行啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
网易云信
2023-12-06 广告
2023-12-06 广告
UIkit是一套轻量级、模块化且易于使用的开源UI组件库,由YOOtheme团队开发。它提供了丰富的界面元素,包括按钮、表单、表格、对话框、滑块、下拉菜单、选项卡等等,适用于各种类型的网站和应用程序。UIkit还支持响应式设计,可以根据不同...
点击进入详情页
本回答由网易云信提供
展开全部
完全可以啊,只要在触发器内容前面加个判断就OK啊
declare @i int
select @i=COUNT(1) from B
if @i>100
delete from B
追问
在原来的基础上这样修改行吗
。。
as
declare @A1 bigint, @i int
select @i=COUNT(*) from B
if @i>100
begin
delete from B
end;
else
begin
set @A1 = 0
。。。
追答
可以,其实不需要else也是一样的。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询