SQL SERVER这样的触发器怎么写?

在订单表里新增一个触发器,监测每笔打款,最后一笔打款金额的打款时间回写到订单的资金到账时间里

字段如下:t_contract_order 订单表
discount_money 总金额
pay_money 已付金额
extend191 资金到账时间
PAY_FACT_DATE 打款时间
这边因为他可能不一定一次付清,所以会有多次。所以要将打款时间倒序排列出,取第一个值(也就是最后一次打款时间)

0

7个回答

create TRIGGER test
ON t_contract_order
AFTER UPDATE
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
declare @id int
if UPDATE(pay_money)
begin
select @id=id from inserted
if exists(select id from t_contract_order where id=@id and discount_money=pay_money)
begin
update t_contract_order set extend191=PAY_FACT_DATE where id=@id
end
end
-- Insert statements for trigger here

END
GO

0
zwl_zwl_123456
zwl_zwl_123456 回复qq_39372401: 打款记录是在另外一张表里?
一年多之前 回复
qq_39372401
qq_39372401 还有一个,就是他可能分批打款,所以要把打款时间倒序排列,然后取第一个
一年多之前 回复

我觉得你应该先说一下怎么定义最后一笔

0
qq_39372401
qq_39372401 不用管啊,我只要看打款金额和总金额比较就行了。不用管是不是最后一笔啊
一年多之前 回复

create TRIGGER test
ON t_contract_order
AFTER UPDATE
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
declare @id int
if UPDATE(pay_money)
begin
select @id=id from inserted
if exists(select id from t_contract_order where id=@id and discount_money=pay_money)
begin
update t_contract_order set extend191=PAY_FACT_DATE where id=@id
end
end
-- Insert statements for trigger here

END
GO

0

Oracle trigger:

CREATE OR REPLACE TRIGGER "ORDERS_UPDATE_TRIG"
BEFORE UPDATE ON t_contract_order REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
DECLARE

BEGIN

IF UPDATING ('pay_money')
THEN
:NEW.PAY_FACT_DATE := sysdate;
END IF;
END ORDERS_UPDATE_TRIG;

0

以下是例程
定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。
常见的触发器有三种:分别应用于Insert , Update , Delete 事件。(SQL Server 2000定义了新的触发器,这里不提)

我为什么要使用触发器?
比如,这么两个表:
Create Table Student( --创建学生表
StudentID int primary key, --学号,定义主键约束
....
)

Create Table BorrowRecord( --创建借书记录表
BorrowRecord int identity(1,1), --自动增长流水号
StudentID int , --学号
BorrowDate datetime, --借出时间
ReturnDAte Datetime, --归还时间
...
)

用到的功能有:
如果我更改了学生的学号,我希望他的借书记录仍然与这个学生相关(也就是同时更改借书记录表的学号);

这时候可以用到触发器。对于1,创建一个Update触发器:

Create Trigger truStudent
On Student

for Update --触发器类型--Update

--Name:truStudent
--func:更新BorrowRecord 的StudentID,与Student同步。
--Use :None
--User:System
--Author: wp_love
--Date : 2003-4-16

--Memo : 临时写写的,给大家作个Sample。没有调试阿。

As
if Update(StudentID)
begin

Update BorrowRecord
Set br.StudentID=i.StudentID
From BorrowRecord br , Deleted d ,Inserted i
Where br.StudentID=d.StudentID

end

理解触发器里面的两个临时的表:Deleted , Inserted 。注意Deleted 与Inserted分别表示触发事件的表“旧的一条记录”和“新的一条记录”。
一个Update 的过程可以看作为:生成新的记录到Inserted表,复制旧的记录到Deleted表,然后删除Student记录并写入新纪录。

0

新建一个表,每次打款都触发该表清空数据并添加打款金额的打款时间回写到订单的资金到账时间里

0

这个只能给你个思路,因为我之前也做过这样的操作,但是表结构是订单对应多条记录表。。。每一笔都是一个叠加,把这个叠加的值就是已经回款的值跟总金额做比较,如果大于等于总金额,那就执行你的操作。。还有一个就是触发器虽然好用方便,但是报错的时候很抓狂,建议在程序后台做处理

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
SQL SERVER 触发器的编写
n触发器刚开始接触时感觉还很困难,但是凡事只要静下心看还是很简单。 n这是一个sql server修改操作的触发器,希望可以给刚接触触发器的朋友一些启示。...
SQL Server 使用触发器写log(格式参考)
nCREATE TRIGGER triggerName --触发器名称n ON tblGoods --表名,这个触发器是针对哪个表的n FOR INSERT,DELETE,UPDATEnAS n--系统自动在内存中创建deleted表或inserted表,触发器执行完成后,自动删除。nBEGINn --Insertn IF(EXISTS(SELECT 1 FROM...
SQL中的三种触发器的定义与写法
触发器的定义与写法 n n n
SqlServer触发器的一个例子
先抄一点关于触发器的文字介绍: n在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。 n常见的有三种:分别应用于Insert , Update , Delete 事件。一、Trigger语法: ncreate trigger tr_name non table/view n{for | after | instead of }
一个最简单的Sql Server触发器示例。
nCREATE TRIGGER TRI_BIISBN1 --创建触发器名称nON dbo.BookInfo --位于BookInfo的改动nFOR UPDATE --对于BookInfo的更新操作,触发器则执行nAS nIF UPDATE(biTime) --判断如果biTime修改则执行Begin EndnBEGINn UPDAT...
【问题解决】借助Navicat 创建SQL Server 触发器
【背景】nn今天在学习牛腩新闻视频,接触到SQL触发器的建立。 n但是自己电脑上安装的SQL Server 2014 再按照步骤操作时发现是不能点击的。 n在网上查找资料发现可以有很多方法la...
SQL SERVER触发器 text类型下用 instead of 触发器注意事项 取不到identity 值的处理
SQL SERVER触发器 text类型下用 instead of 触发器注意事项 取不到identity 值的处理
SQL Server2012 学习之(十六) :触发器的创建与使用
接上篇博客的内容,触发器可以看作是一个特殊的存储过程。本篇博客主要关注DML和DDL触发器对应的使用方法。1.触发器的定义触发器的定义如下图。它与存储过程的区别在于触发器是被动调用的 ,即在满足特定事件的情况下被执行,而存储过程是在使用操作语句时主动进行调用。触发器大致分为两种:DDL触发器和DML触发器,相对应的具体定义如下。2.创建触发器2.1创建INSERT触发器INSERT触发器是DML触...
SqlServer2012实例之触发器的创建
一、触发器实验注意:把studentmanager数据库中的所有表用select  into命令复制一份,然后用复制后新表完成下面的实验,同时,对每个触发器都要进行验证。SELECT * INTO department2 FROM departmentSELECT * INTO class2 FROM classSELECT * INTO course2 FROM courseSELECT * I...
sql server 两个表之间的关联(触发器)
create trigger tri_user_bookrnon user_bookrnafter updaternasrnbeginrnupdate book_borrow set book_borrow=user_book.borrow_isrnfrom book_borrowrninner join inserted user_book on book_borrow.book_borrow=
sqlserver中编写的after insert触发器
[code="sql"]rnCREATE TRIGGER [dbo].[actStatisticsTrigger_insert]rnON [dbo].[gl_activity]rnAFTER INSERTrnASrnDECLARE @counntOfInsert INTrn--考虑到一条insert语句插入多条记录的情况rnSELECT @counntOfInsert = COUNT(*) FRO...
几个sql触发器样例
触发器虽然在sql标准中有支持,但是几个数据库仍然还是具有特殊的语法。笔者试着写了几个比较常用的触发器作为记录。DEMO使用一下两个表作为触发器的使用示例ntest1(a, b, c, d)ntest2(a, c, d)nMysqlninsertnDROP TRIGGER IF EXISTS after_insert_trigger;nDELIMITER $nCREATE TRIGGER after
sql server2008里面的触发器
//1   在哪里建立触发器n通过 数据库->你的数据库->表->触发器->右击->新建触发器.nn和新建一个查询,然后再写上触发器是一样的..n        只是前者,编辑器帮你写了个开头而已,n        编写完后,点击“执行”按钮执行命令      nnnnn  //2   在插入操作时删除ID值最小的行,用于解决历史备份问题nUSE [wwwTest]nGO
SqlServer触发器的格式+小例子解析
触发器基本语法格式:create trigger tri_name        on table                                for insert/update/deleted    asSQL code触发器基本语法解析:create trigger tri_name        //(tri_name:自定义触发器的名称)on table         ...
SqlServer触发器的应用
更新事务类似于在删除之后执行插入;首先旧行被复制到 deleted 表中,然后新行被复制到触发器表和 inserted 表中。rn rn1.插入操作(Insert) rn      Inserted表有数据,Deleted表无数据 rn2.删除操作(Delete) rn      Inserted表无数据,Deleted表有数据 rn3.更新操作(Update) rn      Inserted表...
sql 在更新某字段后写入日志触发器
sql 在更新某字段后写入日志触发器 sql某字段更新后,触发该sql语句的sql触发器 类似于记入日志
使用NaviCat设置SQLServer 触发器 记录数据的修改和创建时间
1.首先在需要记录时间的的表 选择【设计表】按钮 在表中新建一个字段,用于存储时间值 rn rn这个字段的类型可以根据你要设置的时间类型来进行更改rnrn2.接下来选择 【触发器】按钮 rn rn【名字】可以根据自己需求写 rn【栏位】选择[AFTER] :这个代表只有对数据库操作成功之后才执行触发器 rn后面的[插入][更新]选项 是选择触发条件,这个可以根据自己需求来选择 rn【定义】 rn这里是需要在 ‘be...
SQL触发器使用实例
SQL触发器使用实例 --创建触发器,示例1 /* 创建触发器[T_INSERT_卷烟库存表],这个触发器较简单。 说明: 每当[卷烟库存表]发生 INSERT 动作,则引发该触发器。 触发器功能: 强制执行业务规则,保证插入的数据中,库存金额 = 库存数量 * 库存单价。 注意: [INSERTED]、[DELETED]为系统表,不可创建、修改、删除,但可以调用。 重要: 这两个系统表的结构同插入数据的表的结构。 */ IF EXISTS (SELECT NAME FROM SYSOBJECTS WHERE XTYPE = 'TR' AND NAME = 'T_INSERT_卷烟库存表') DROP TRIGGER T_INSERT_卷烟库存表 GO CREATE TRIGGER T_INSERT_卷烟库存表 ON 卷烟库存表 FOR INSERT AS --提交事务处理 BEGIN TRANSACTION --强制执行下列语句,保证业务规则 UPDATE 卷烟库存表 SET 库存金额 = 库存数量 * 库存单价 WHERE 卷烟品牌 IN (SELECT 卷烟品牌 from INSERTED) COMMIT TRANSACTION GO
SQL server触发器、存储过程操作远程数据库插入数据,解决服务器已存在的问题
最近弄了一个小项目,也不是很复杂,需要将一个数据库的一些数据备份到另外一个库,不是本地,可能是网络上其他的数据库,想了一下,用了存储过程和触发器。也不是很复杂,首先我需要操作远程数据库,于是写了一个存储过程:nCREATE PROCEDURE sendInfoToRemoteDb n @CardNo varchar(50),n @CardStyle varchar(20), n @userId
一次SQLSERVER触发器编写感悟
背景:BOSS需要我写一个工厂采集端到服务器端的数据同步触发器,数据库采用的是sqlserver2008rn需求:将多台采集机的数据同步到服务器中,如果采集端数据库与服务器数据库连接失败则将数据保存到记录表中rn前期思路:从采集端创建服务器端的数据库链接,通过采集端的insert,update触发,同时往远程表写入rn问题:由于初始接触sqlserver,对sqlserver触发器了解不深,查阅一
sql server 实现行级触发器方法
sql server本身没有行级触发器,可用游标实现nnncreate trigger delticketnon ticketnafter delete nasnbegin n declare @Tno char(20)n declare cur cursor local forward_only forn select [Tno]n from deletedn open curn fetch n...
SQL server 存储过程以及触发器的使用实例
在数据库xsgl中完成以下操作。1、建立class_info的存储过程,当执行该操作过程时,只要给出学生的姓名,就能查到他的学号和专业。删除存储过程。create procedure class_infon@name varchar(12)nasnselect Sno,Sdeptnfrom Snwhere Sname=@name2、使用触发器实现S,SC表的级联删除。create trigger ...
触发器实现对插入数据的字段更改 Oracle+SQL Server
最近有个使用触发器实现对插入数据的某个列做更改的需求,因此整理了Oracle和SQL Server对于此类需求的触发器写法,本文仅提到了Insert触发器。rnrn首先我们创建一张表:rnrn--创建Test表nCreate table test(id int primary key,name varchar(20),sex varchar(1),status int)nrnrnrn我们的目的是实
sqlserver触发器加密破解
亲测2005,2008r2,2012成功。安装exe文件后,启动,输入数据库服务名、账号密码,connect。点database选择触发器所在数据库,点开在子节点找到DML triggers即可看到所有触发器(包括加密未加密的),随便选中一个触发器右键show ddl script,工具右侧会显示触发器源码,选择最下面这项decryption wizard可以导出N项(自由选择)
触发器创建sql语句
前后触发器创建语句使用sql语句创建触发器
sqlserver 触发器 学习记录
    照例先讲场景:算法组把他们算出来的风险评分插入到算法对应的表格(外键+分数+若干其他字段),在他们插入或修改分数的时候,需要把对应的分数,根据外键插入到对应的业务表。    触发器就是在数据库某个表格发生增删改的操作时,被触发执行预设的SQL语句。      数据库触发器可以分为两大类:前触发器(instead of)和后触发器(after|for)。    前触发器即执行到触发的语句时,...
sqlserver查看触发器,存储过程,视图及表的一些命令
select name from sysobjects where xtype='TR' --所有触发器rnrnselect name from sysobjects where xtype='P' --所有存储过程rnrnselect name from sysobjects where xtype='V' --所有视图rnrnselect name from sysobjects where
SQL SERVER 利用触发器记录登录日志
       有时候我们需要记录谁登陆过我们的服务器,来确定一些信息,我们可以使用触发器来实现,参考文档:登录触发器       新建日志表:CREATE TABLE TBLOG n( n ID INT NOT NULL IDENTITY(1, 1) , n EVTIME DATETIME NOT NULL DEFAULT ( GETDATE() ) , ...
SQL 触发器调用WebApi
1.需求数据库表添加,修改,删除数据,触发器生效,推送数据数据到WCF接口nn2.可行方案2种,第一种创建数据库项目形式nna)创建WCF服务,发布服务nnb)启用数据库CLR功能,默认是关闭状态nnnnEXEC sp_configure 'show advanced options' , '1';ngonreconfigure;ngonEXEC sp_configure 'clr enabled...
Sql Server中触发器语法及使用入门【笔记】
n--CREATE TRIGGER TRI_BIISBN ON dbo.BookInfo  --CREATE 触发器名字 ON 表名n--AFTER INSERT AS --对表进行的操作n--BEGINnn--ENDnnnCREATE TRIGGER TRI_BIISBN1  --创建触发器名称nON dbo.BookInfo             --位于某表的改动nFOR UPDATE  ...
SQL 更新触发器的使用
CREATE TRIGGER [dbo].[trig_so_salesOrder_update] n ON [dbo].[so_salesOrder]n AFTER updaten AS //定义一个变量n DECLAREn @sfname varchar;//判断是否有数据插入n if @@rowcount = 0 n return //判断插入的数据字段sfname是
SQL Server 触发器的使用,实现多字段自增长
今天遇到了个数据库的问题:主键ID字段自增长,编号Number字段自增长,但是SQL Server只支持一个自增长字段,那该怎么解决呢?rn这时候就要用到了SQL Server的触发器功能了,废话不多说,直接上代码rn前提:ID字段为自增长rnCreate TRIGGER Table_User_InsertnON [User]nAFTER INSERTnASnset xact_abort on -
sql创建触发器,避免死循环
两张用户表,修改其中一张表a的密码字段,另一张表b也同时更新字段。同理的,修改表b的密码字段,另一张表a也同时更新字段。分别为两张表创建触发器,这样就会出现,两个触发器会陷入死循环,处理方法如下: CREATE TABLE [T_users]( n [yhbm] [varchar](20) NOT NULL,n [pwd] [varchar](20) NULL)CREATE TABLE [dbo]...
SQL_触发器、外键约束
1、构造一个触发器audit_log,在向employees_test表中插入一条数据的时候,触发插入相关的数据到audit中。 nCREATE TABLE employees_test( nID INT PRIMARY KEY NOT NULL, nNAME TEXT NOT NULL, nAGE INT NOT NULL, nADDRESS CHAR(50), nSALARY REAL n);...
SQL SERVER 触发器视频讲解
讲述触发器创建,编辑,修改及功能,使用的时候很容易理解
sql 触发器记录修改的字段和值
create TRIGGER dbo.tri_Export_Subsidiary_updaten   ON  dbo.Export_Subsidiaryn   for UPDATE   nAS nBEGINn    -- SET NOCOUNT ON added to prevent extra result sets fromn    -- interfering with SELECT sta...
SQL Server中触发器的简单使用示例
1、定义触发器nnCREATE  TRIGGER  <触发器名>nnON  <表名>  FOR|AFTER|INSTEAD OF  <触发事件>nnASnn<触发动作体>nn注:nnAFTER表示只有执行了指定的操作(DELETE,UPDATE,INSERT)之后,触发器才被激活,执行触发器中的sql语句;n FOR表示为AFTER触发器,并且该触发...
sql server 存储过程,触发器,事务
尽管sql server 提供了使用方便的图形化用户界面,但是各种功能的实现基础是 transact-sql 语言. n transact-sql语言直接来源于sql语言,因此也具有sql语言的几个特点: n - 一体化的特点 transacpt-sql 语言集数据定义语言,数据操纵语言,数据控制语言和附加语言为一体,其中附加语言元素不是标准的sql语言的内容,但是它增强了用户对数据库操作的灵活
利用SqlServer触发器自动更新表updatetime字段值
本文主要记录了使用SqlServer数据库触发器自动更新表的"更新时间updatetime"字段nn在 MySQL数据库中,某行数据创建时间字段 createtime 、 行最新更新时间字段updatetime 可建表时分别用"datetime DEFAULT CURRENT_TIMESTAMP" 和 " datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE C...
触发器,根据具体业务写弹窗提示
USE [XXXXX]nGOn/****** Object:  Trigger [dbo].[trg_Biz_Samp_19]    Script Date: 2016/4/22 9:58:18 ******/nSET ANSI_NULLS ONnGOnSET QUOTED_IDENTIFIER ONnGOn--------先接收任务再样品领取,结果登记提示-------------
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 这样学习java 消消乐这样的游戏开发价格