1. 触发器怎么写
create or replace trigger dml_a
before insert or delete on a
for each row
as
begin
when inserting then
insert into b values(a.:new.字段1,a.:new.字段2。);
when deletint then
delete from b where b.字段=a.:old.字段;
end dml_a;
2. 触发器的写法
使用触发器TRIGGERINSERT TRIGGER触发器是由SQL语句集组成的代码块,在响应某些动作时激活该语句集.一个触发器也可被解释为特定类型的存储过程,每当动作发生时执行该存储过程:每当基础表中数据受到数据操纵语言(DML)语句-INSERT,UPDATE,DELETE的影响时,触发器就被激发.触发器的特征:1. 当任何数据修改语句发出时,它被sql server自动调用2. 在存储过程的情况下,它不能被显式地调用或执行3. 它防止了对数据的不正确,未授权的,和不一致的改变4. 它不能返回数据给用户触发器语法: CREATE TRIGGER trigger_name ON table_name [WITH ENCRYPTION] FOR[INSERT | UPDATE | DELETE] AS sql_statement幻表: 当触发器激发对INSERT,DELETE,或UPDATE语句的响应时,两个特殊的表被创建:插入表(Inserted)和删除表(deleted),示例:create trigger trgInsertRequisitonon Requistionfor insertasdeclare @VacnacyReported intdeclare @ActualVacancy intselect @ActualVacancy = iBudgetedStrength - currentStrengthfrom Position join Inserted onPosition.cPositionCode = Inserted.cPositionCodeselect @VancyReported = inserted.siNoOfVacancyfrom insertedif(@VancyReported > @ActualVacancy)begin print'The actual vacancies are less than the vacncies' rollback transactionendreturn DELETE TRIGGER1.当试图从触发器表中删除一行时,DELETE TRIGGER被触发2.使用DELETE TRIGGER触发器来实现引用完整性约束主要有三种途径: 1.串联方法:每当从主表中删除记录时,删除依赖表中的记录 2.限制方法:如果相尖记录出现在依赖表中,则限制从主表中删除记录 3.无效方法:每当一个记录从主表中删除时,把依赖表中所指列的值变为无效select * from publisher;create trigger trgfordelon publisherfor deleteas begin print '您删除的数据的内容为' select * from deletedenddelete from publisher where pub_id = 9;UPDATE TRIGGER 当一个UPADATE触发器被激发时,它使用关于其操作的两个逻辑表-包含原始行的deleted表和存储新行的insertd表.例一:create trigger trgUpdatePubon Publisherfor updateasif update(pub_id)begin print 'publisher id cannot be modified' rollback tran endè当用户试图修改pub_id列时它就激发,它因此阻止用户修改pub_id的内容并回滚整个事务例二:create trigger trgUpdateContractRecruiteron ContractRecruiterfor updateas declare @AvgPercentageCharge int select @AvgPercentageCharge = avg(siPercentageCharge) from ContractRecruiter if(@AvgPercentageCharge > 11) begin print 'The average cannot be more than 11' rollback transaction end修改触发器语法:alter trigger trigger_nameon table_name[with encryption]for[insert | delete | update]as sql_statements撤消触发器: DROP TRIGGER trigger_name[,。
n]通过触发器加强数据的完整性触发器可以用来确保和加强业务规则和数据完整性,如,只有库存中有该产品时,才可以出售,如果使用触发器,它将会对不正确的事务做检查,并确保只有有效的数据才能插入到表中.例如:某种改变违反了引用完整性,那么所有这样的改变都被拒绝,因此所有试图改变数据库中的数据都被取消. CREATE TRIGER trgUpdateDeleteON TitleAuthorFOR INSERT,UPDATEAS If (SELECT COUNT(*) FROM Titles t JOIN inserted i ON t.Title_id = i.Title_Id) = 0 BEGIN PRINT 'Invialid title ID entered' ROLLBACK END IF(SELECT (COUNT(*) FROM Authors t JOIN inserted i ON t.Au_Id = i.Au_Id) = 0 BEGIN PRINT 'INVIALID author ID eneter' ROLLBACK END多触发器: SQL SERVER允许在给定表中定义多个触发器.这意味着单个DML语句可激活两个或多个触发器.触发器以创建次序被激活.AFTER 和 INSTEAD OF 触发器 AFTER触发器在功能上,是在DML操作执行成功后.再执行的触发器. 如: create triger trgDeletetitleson TitlesAFTER DELETEAS PRINT 'DELETION SUCCESSFUL'*********************************************************************假如单个DML后有多个AFTER触发器,你可以通过使用sp_settriggerorder系统存储过程来改变这些触发器的执行次序. sp_settriggerorder
欢迎大家指正。
3. SQL触发器写法
基本语法
create trigger tri_name
on table
for insert/update/deleted
as
SQL code
例:
create trigger tri_mc(tri_mc:自定义触发器的名称)
on table (table:触发的表名)
for insert (触发类型:insert,插入数据触发 update,更新数据触发 delete,删除数据触发)
as
declare @kssj datetime (定义一个变量,做中间处理)
declare @sqbh char(40)
select @kssj = kssj,@sqbh = sqbh from inserted
(插入数据时,插入的数据在表 inserted
更新数据时,更新后的数据在表 inserted 更新前的数据在表中 deleted
删除数据时,删除的数据在表 deleted
不同的操作可以,取出不同的中间数据,做处理,例子中取出插入的数据)
update table2 set isks = 1,kksj = @kssj where sqbh = @sqbh
(根据中间处理做相应操作,例子的处理为,将插入的值同步更新到另一个表)
4. SQL触发器怎么写
--此题唯一的难度是用户名 假设用户名已保存在表CurrentUser中
--给出插入操作的触发器创建 其他类似
CREATE TRRIGER MYTR1
ON A
FOR INSERT
AS
DECLARE @UserName varchar(20)
SELECT @UserName=UserName from CurrentUser
INSERT INTO C (TableName,Type,dDate,UserName) VALUES ('A','Insert',getdate(),@UserName)
GO
5. 这个触发器怎么写
oracle 里的触发器 create or replace trigger insert_tri after insert on B for each rowdeclare begin update A set count = count-:new.count where GId=:new.GId; end insert_tri;sql 触发器 create trigger insert_tri on B after insert as update A set count = count-inserted.count where A.GId=inserted.GId。
6. 这样的触发器该怎么写
你没说什么数据库还有就是你需要的是什么触发器。
是不是insert+update 这边考虑到批量更新所有给你加了个游标。create table Member( JiFen int, ZheKou numeric(3,2))create table JiFZheK( JiBie int, XiaXian int, ShangXian int, ZheKou numeric(3,2))---生产数据insert into Memberselect '51',nullinsert into JiFZheKselect 10,1,10,0.95 union allselect 9,11,20,0.90 union allselect 8,21,30,0.85 union allselect 7,31,40,0.80 union allselect 6,41,50,0.75 union allselect 5,51,60,0.70 union allselect 4,61,70,0.65 union allselect 3,71,80,0.60 union allselect 2,81,90,0.55 union allselect 1,91,100,0.50 --触发器create trigger trig_Member on memberfor updateasbegin declare @jifen int declare @zhekou numeric(3,2) declare cur_new cursor local for select jifen from inserted open cur_new fetch cur_new into @jifen while(@@fetch_status = 0) begin select @zhekou = zhekou from JiFZheK where xiaxian <= @jifen and shangxian >=@jifen update Member set zhekou = @zhekou where jifen = @jifen fetch next from cur_new into @jifen end close cur_new deallocate cur_newend--测试update member set jifen = 52结果如下:52 .70update member set jifen = 91结果91 .50你也去测下吧。
7. 触发器的正确写法
兄弟,你这样写就好了DELIMITER $$USE `mspay`$$DROP TRIGGER /*!50032 IF EXISTS */ `tr_date`$$CREATE /*!50017 DEFINER = 'root'@'localhost' */ TRIGGER `tr_date` BEFORE UPDATE ON `dormitoryinfo` FOR EACH ROW BEGIN IF new.result='Y'THENSET new.date=NOW();END IF;END;$$DELIMITER ;。