当前位置:首页 » 编程语言 » sql的触发器添加数据
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql的触发器添加数据

发布时间: 2022-12-08 17:45:11

sql做一个触发器,一个表中添加了一条信息,另一个表中的某个列值就加一,求代码和解释

createtriggerinsert_table--创建触发器,触发器名称insert_table
ontablea--哪个表的触发器
forinsert--哪个动作触发
as
declare@avarchar(100)--定义一个参数
select@a=idfrominserted--取插入数据中的id
updatetablebsetn=n+1
where
--更新另一个表中相同ID的n
GO

createtriggerinsert_table--创建触发器,触发器名称insert_table
ontablea--哪个表的触发器
forinsert--哪个动作触发
as
updatetablebsetn=n+1--无条件更新,只要tablea有insert操作,tableb的n就加一
GO

㈡ SQL触发器中怎么给变量赋值

declare @Cnumber int;----销售商品的数量
declare @Cid varchar(50);----库存里面商品的ID
--给需要减少的商品的数量赋一个初始值,确保在重新赋值时不会出错

SET @Cnumber = 0
--给商品的编号赋赋一个初始值
SET @Cid = '1'
--如果不赋个初始值,在从inserted中获取并赋值时会出现值为NULL的情况

--获取需要减少的商品的数量和商品的编号

SELECT @Cnumber = Cnumber,@Cid = Cid FROM inserted
--接下来的更新操作就是按照你原来的去更新就行了

update Commodity---商品库存 set Cnumber=Cnumber-@Cnumber where Cid=@Cid

--也可以这样更新
UPDATE Commodity SET Cnumber = Cnumber - Cnumber
FROM
Commodity AS T
INNER JOIN
inserted AS T1
ON
T.Cid = T1.Cid
--这样可以批量更新,那么针对一条数据进行更新是没问题的,同事也省去了声明变量一级变量赋值的步骤

㈢ 请问sql触发器insert触发器如何使用

DML触发器有三类:
1, insert触发器;
2, update触发器;
3, delete触发器;
触发器的组成部分:
触发器的声明,指定触发器定时,事件,表名以类型
触发器的执行,PL/SQL块或对过程的调用
触发器的限制条件,通过where子句实现
类型:
应用程序触发器,前台开发工具提供的;
数据库触发器,定义在数据库内部由某种条件引发;分为:
DML触发器;
数据库级触发器;
替代触发器;
DML触发器组件:
1,触发器定时
2,触发器事件
3,表名
4, 触发器类型
5, When子句
6, 触发器主体
可创建触发器的对象:数据库表,数据库视图,用户模式,数据库实例
创建DML触发器:
Create [or replace] trigger [模式.]触发器名
Before| after insert|delete|(update of 列名)
On 表名
[for each row]
When 条件
PL/SQL块
For each row的意义是:在一次操作表的语句中,每操作成功一行就会触发一次;不写的话,表示是表级触发器,则无论操作多少行,都只触发一次;
When条件的出现说明了,在DML操作的时候也许一定会触发触发器,但是触发器不一定会做实际的工作,比如when 后的条件不为真的时候,触发器只是简单地跳过了PL/SQL块;
Insert触发器的创建:
create or replace trigger tg_insert
before insert on student
begin
dbms_output.put_line('insert trigger is chufa le .....');
end;
执行的效果:
SQL> insert into student
2 values(202,'dongqian','f');
insert trigger is chufa le .....
update表级触发器的例子:
create or replace trigger tg_updatestudent
after update on student
begin
dbms_output.put_line('update trigger is chufale .....');
end;
运行效果:
SQL> update student set se='f';
update trigger is chufale .....
已更新8行;
可见,表级触发器在更新了多行的情况下,只触发了一次;

㈣ sql触发器插入数据

你这个是for insert 的,deleted 里面是空 的,没有集合跟inserted
对应,所以永远是空的
直接写就可以,不用判断

INSERT INTO State SELECT Access_join_Name, Access_join_personnel, Access_join_site, Access_join_date, Access_join_card FROM inserted

㈤ SQL触发器中怎么插入与数据库表中不重复的记录

create
trigger
a1_a
on
[dbo].[a1]
for
insert
as
insert
into
b.dbo.b1(g,h,j)
select
c
as
g,d
as
h,e
as
j
from
inserted
在a数据库a1表,加上面的触发器(只限于同一台服务器不通数据库数据转存),如果要在不同的服务器上,就先在a所在服务器上加链接服务器,触发器修改为:
create
trigger
a1_a
on
[dbo].[a1]
for
insert
as
insert
into
[server
name].b.dbo.b1(g,h,j)
select
c
as
g,d
as
h,e
as
j
from
inserted

㈥ SQL数据库 触发器实现多表同步插入

create TRIGGER [dbo].[tr_tb_erp_make_Pack_insert]
ON [dbo].[tb_erp_make_Pack]
FOR INSERT
AS
BEGIN
SET XACT_ABORT ON
SET NOCOUNT ON
declare @out_Flag int=0
declare @out_Rtn varchar(40)=''
declare @smsg nvarchar(400)
DECLARE @v_barCode VARCHAR(20)
DECLARE @v_cInvCode NVARCHAR(20)
DECLARE @v_packID INT
DECLARE @v_packDate DATETIME
DECLARE @v_userID INT
begin tran
DECLARE Cur CURSOR FOR
SELECT barCode,cInvCode,packID,packDate,userID FROM insertedOPEN Cur
FETCH NEXT FROM Cur INTO @v_barCode,@v_cInvCode,@v_packID,@v_packDate,@v_userIDWHILE @@FETCH_STATUS=0
BEGIN
SET @out_Flag = 0
SET @out_Rtn='添加成功!'
IF EXISTS(SELECT 1 FROM tb_erp_make_barCode WHERE barCode=@v_barCode)BEGIN
UPDATE dbo.tb_erp_make_barCode SET cInvCode=@v_cInvCode,packID=@v_packID,packDate=@v_packDate,vFlag=0 WHERE barCode=@v_barCodeIF @@error <> 0
BEGIN
SET @out_Flag=1
SET @out_Rtn='触发器修改(UPDATE)错误!'
SET @smsg='错误:'+@out_Rtn
ROLLBACK TRAN
RAISERROR (@smsg,11,1)
RETURN
END
END
ELSE
BEGIN
INSERT INTO dbo.tb_erp_make_barCode
(
barCode ,packID ,packDate ,cInvCode
)
VALUES (
@v_barCode ,@v_packID ,GETDATE() ,@v_cInvCode)
IF @@error <> 0
BEGIN
SET @out_Flag=2
SET @out_Rtn='触发器新增(INSERT)错误!'
SET @smsg='错误:'+@out_Rtn
ROLLBACK TRAN
RAISERROR (@smsg,11,1)
RETURN
END
END
FETCH NEXT FROM Cur INTO @v_barCode,@v_cInvCode,@v_packID,@v_packDate,@v_userIDEND
CLOSE Cur
DEALLOCATE Cur
COMMIT TRAN
RETURN