两个表,一个时“账户信息表”(字段:卡号、姓名、开户行),其中,卡号设置了主键,只能唯一;
另一个表时“交易明细表”(字段:交易卡号、 交易方姓名 、交易时间 、交易金额、对手卡号、对手名称)
如何用触发器,在添加交易明细时候,自动将交易卡号和交易对手卡号及交易双方姓名增加在账户信息表的卡号字段/姓名字段里,已存在的不添加。
CREATE trigger 触发器名 on [交易明细表]
FOR INSERT
as
begin
-- 交易方卡号
DECLARE @id varchar(20)
-- 交易方姓名
DECLARE @name varchar(20)
-- 交易对手卡号
DECLARE @ids varchar(20)
-- 交易对手姓名
DECLARE @names varchar(20)
-- 在inserted表中查询已经插入记录信息
select @id = 交易卡号, @name = 交易方姓名,@ids = 对手卡号, @names = 对手姓名 from inserted;
-- 在户信息表表中查询交易卡号是否存在,不存在就插入
IF NOT exists(SELECT * FROM 账户信息表 WHERE 卡号=@id)
insert into 账户信息表(卡号,姓名)values(@id,@name);
-- 在户信息表表中查询交易对手卡号是否存在,不存在就插入
IF NOT exists(SELECT * FROM 账户信息表 WHERE 卡号=@ids)
insert into 账户信息表(卡号,姓名)values(@ids,@names);
end
举个栗子
CREATE TRIGGER MyTRIGGER
ON [dbo].[交易明细表]
FOR INSERT
AS
BEGIN
--定义变量
declare @id varchar(20), @name varchar(20);
select @id = 交易卡号, @name = 交易方姓名 from inserted;
set @name = @name;
set @id = @id;
insert into 账户信息表(卡号,姓名)values(@id,@name);
END
CREATE TRIGGER MyTRIGGER2
ON [dbo].[交易明细表]
FOR INSERT
AS
BEGIN
--定义变量
declare @id varchar(20), @name varchar(20);
--在inserted表中查询已经插入记录信息
select @id = 对手卡号, @name = 对手名称 from inserted;
--set @name = @name;
--set @id = @id;
insert into 账户信息表(卡号,姓名)values(@id,@name);
END
CREATE trigger 触发器名 on [交易明细表]
FOR INSERT
as
Begin
if not exists(select 1 from 账户信息表 inner join inserted on 账户信息表.卡号=inserted.交易卡号)
insert into 账户信息表(卡号,姓名) select 交易卡号,交易方姓名 from inserted
if not exists(select 1 from 账户信息表 inner join inserted on 账户信息表.卡号=inserted.对手卡号)
insert into 账户信息表(卡号,姓名) select 对手卡号,对手名称 from inserted
end