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

sqlinsert触发器实例

发布时间: 2022-07-29 00:38:55

sql2000 insert 触发器简单的实现

CREATE TRIGGER tr_name
ON a表
FOR INSERT
AS
update t set t.scc=t2.scc from a表 t,inserted t1,b表 t2 where t.saa=t1.saa and t.sbb=t1.sbb and t1.saa=t2.saa and t1.sbb=t2.sbb

❷ 请问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触发器 insert

CREATETRIGGERtr_test
ONa表
AFTERINSERT
AS
BEGIN
UPDATEB表SETdate=DATEADD(date,1,year)WHEREID=(SELECTIDFROMINSERTED)
END

/*说明:INSERTED 在微软SQL Server里称为虚拟表(INSERT动作时触发)

而在甲骨文(Oracle)里称为内存表。--只是叫法不一样罢了。

*/

❹ SQL Server Insert触发器

年龄+1岁是指他们本来有年龄数据了么?如果有,那么一条更新语句应该行,不需要触发器。update
student
set
sage=sage+1
如果是插入数据时想把原来的年龄+1则需要触发器
set
ansi_nulls
on
set
quoted_identifier
on
go
alter
trigger
[dbo].[add]
on
student]
after
insert
as
begin
set
nocount
on;
update
student
set
sage=sage+1
end
默认成绩均为0是不需要触发器的,你把grade字段的默认值设为0即可。

❺ SQL server触发器中 update insert delete 分别给写个例子被。

INSERT:

表1(ID,NAME)
表2(ID,NAME)
当用户插入表1数据后,表2也被插入相同的数据
CREATETRIGGERTRI1
ON表1
FORINSERT
AS
BEGIN
INSERTINTO表2SELECT*FROMINSERTED
END
GO

DELETE:

表1(ID,NAME)
表2(ID,AGE,GENDER)
当用户删除表1某条ID的数据后,表2相应ID的数据也被删除
CREATETRIGGERTRI2
ON表1
FORDELETE
AS
BEGIN
DECLARE@idINT
SELECT@idFROMDELETED
DELETE表2
WHEREID=@id
END
GO

UPDATE:

表1(ID,NAME)
表2(ID,NAME)
当用户更改表1NAME列数据后,表2相应ID的数据也同时更新
CREATETRIGGERTRI3
ON表1
FORUPDATE
AS
IFUPDATE(NAME)
BEGIN
UPDATE表2
SETA.NAME=B.NAME
FROM表2A,INSERTEDB
WHEREA.ID=B.ID
END
GO

❻ SQL语句创建INSERT触发器

create trigger TriggerName on TableName
after upate,insert, delete
as
begin

....................................
end

❼ SQL中如何用语句来创建一个触发器举一个简单的例子

一个DML触发器的的例子
CREATE TRIGGER TR_DML
BEFORE
DELETE OR INSERT OR UPDATE
ON table_name
--其他操作
end TR_DML;
意思是在删除或插入或更新table_name这张表之前执行其他操作

❽ SQL的Insert触发器实现

--我是在SQL2005下写的 2005一下版本可能会有问题 请参考

--表1
IF OBJECT_ID('tbl_qxt') IS NOT NULL
begin
DROP TABLE tbl_qxt
end
GO
CREATE TABLE tbl_qxt
(ID int identity(1,1),CREATORID int,INSERTIME datetime,[COUNT] varchar(500))

--表2
if object_id('tbl_user') is not null
begin
drop table tbl_user
end
go
create table tbl_user
(ID int identity(1,1),CREATORID int,USERNAME varchar(50),[PASSWORD] varchar(50))

--给表1加触发器
if object_id('trigger1') is not null
begin
drop trigger trigger1
end
go
create trigger trigger1 on tbl_qxt after insert
as
begin
if exists(select 1 from tbl_user u inner join inserted i on u.CREATORID=i.CREATORID)
begin
print 1
update tbl_qxt set [COUNT]=cast(i.[COUNT] as varchar) +'【'+cast(u.USERNAME as varchar)+'】'
from inserted i inner join tbl_user u
on u.CREATORID=i.CREATORID
where tbl_qxt.ID in(select max(id) from tbl_qxt)
end
end

go
delete from tbl_user
--先往表2里面先插入4条记录
insert into tbl_user(CREATORID,USERNAME,[PASSWORD])
values(1,'admin','admin')
insert into tbl_user(CREATORID,USERNAME,[PASSWORD])
values(2,'test','test')
insert into tbl_user(CREATORID,USERNAME,[PASSWORD])
values(3,'sys','sys')
insert into tbl_user(CREATORID,USERNAME,[PASSWORD])
values(4,'QXT','QXT')
go
delete from tbl_qxt
--测试触发器,往表1中插入数据
insert into tbl_qxt(CREATORID,INSERTIME,[COUNT])
values(1,getdate(),'AAAABBB')
insert into tbl_qxt(CREATORID,INSERTIME,[COUNT])
values(2,getdate(),'BBBBCCC')
insert into tbl_qxt(CREATORID,INSERTIME,[COUNT])
values(3,getdate(),'DDDDEEE')
insert into tbl_qxt(CREATORID,INSERTIME,[COUNT])
values(4,getdate(),'FFFFGGG')

--查看结果
select * from tbl_qxt

--触发器中间那个print 1可以去掉 那是我测试的时候用的

❾ SQL server 触发器 insert

insert 触发器是一个事务处理,你最后都给ROLLBACK,那么那条insert同样被rollback,即触发器所在表,必须写入数据