在论坛中出现的比较难的sql问题:9(触发器专题 插入数据自动更新表数据)
原文:在论坛中出现的比较难的sql问题:9(触发器专题 插入数据自动更新表数据)
所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路。
触发器问题,插入数据时,自动更新表的数据
http://bbs.csdn.net/topics/390634682
表1有字段1,字段2
插入数据4行
字段1 字段2
101
102
101
102
我想通过触发器,直接更新字段2,实现
字段1 字段2
101 101+1
102 102+1
101 101+2
102 102+2
这样的功能,请各位帮忙看看,如何来实现,
在插入数据的时候,实现更新。
方法1,适合2005及以后的版本:
-
--drop table tb
-
-
create table tb
-
(字段1 int, 字段2 int, 字段3 int, 字段4 int)
-
-
-
drop trigger trigger_tb
-
-
create trigger dbo.trigger_tb
-
on tb
-
for insert
-
as
-
-
;with t
-
as
-
(
-
select tb.*,
-
row_number() over(partition by tb.字段1 order by tb.字段4) as rownum
-
from tb
-
inner join inserted i
-
on tb.字段1 = i.字段1
-
and tb.字段3 = i.字段3
-
and tb.字段4 = i.字段4
-
)
-
-
update t
-
set 字段2 = 字段1+rownum
-
-
go
-
-
-
insert into tb
-
select 101,null, 1, 1
-
union all select 102,null, 1, 2
-
union all select 101,null, 1, 3
-
union all select 102,null, 1, 4
-
-
-
--查询
-
select *
-
from tb
-
/*
-
字段1 字段2 字段3 字段4
-
101 102 1 1
-
102 103 1 2
-
101 103 1 3
-
102 104 1 4
-
*/
方法2,适合2000:
-
--drop table tb
-
-
create table tb
-
(字段1 int, 字段2 int, 字段3 int, 字段4 int)
-
-
-
--drop trigger trigger_tb
-
-
create trigger dbo.trigger_tb
-
on tb
-
for insert
-
as
-
-
update tb
-
set 字段2 = t1.字段1 + (select count(*) from tb t2
-
where t2.字段1 = t1.字段1
-
and t2.字段4 <= t1.字段4)
-
from tb t1
-
inner join inserted i
-
on t1.字段1 = i.字段1
-
and t1.字段3 = i.字段3
-
and t1.字段4 = i.字段4
-
-
go
-
-
-
insert into tb
-
select 101,null, 1, 1
-
union all select 102,null, 1, 2
-
union all select 101,null, 1, 3
-
union all select 102,null, 1, 4
-
-
-
--查询
-
select *
-
from tb
-
/*
-
字段1 字段2 字段3 字段4
-
101 102 1 1
-
102 103 1 2
-
101 103 1 3
-
102 104 1 4
-
*/
另一个例子,SQL Server2000触发器实现一个表的更新:
-
--drop table mocta
-
-
create table purtb
-
(请购单号 varchar(10),参考单号 varchar(10),备注 varchar(50))
-
-
create table mocta
-
(工单单号 varchar(10),订单单号 varchar(10))
-
-
-
insert into purtb
-
select '101','201','301' union all
-
select '102','302','302' union all
-
select '103','备料','备料'
-
-
insert into mocta
-
select '201','301' union all
-
select '202','302'
-
go
-
-
--drop trigger trigger_purtb_insert
-
-
-
-
create trigger dbo.trigger_purtb_insert
-
on purtb
-
for insert
-
as
-
-
update purtb
-
set 备注 = isnull((select t1.订单单号
-
from mocta t1
-
where i.参考单号 = t1.工单单号),
-
i.参考单号)
-
from inserted i
-
where purtb.请购单号 = i.请购单号 and
-
purtb.参考单号 = i.参考单号
-
-
-
go
-
-
-
insert into purtb(请购单号,参考单号)
-
select '104','201'
-
union all select '105','xxx'
-
-
-
-
-
--查询
-
select *
-
from purtb
-
/*
-
请购单号 参考单号 备注
-
101 201 301
-
102 302 301
-
103 备料 备料
-
104 201 301
-
105 xxx xxx
-
*/
在论坛中出现的比较难的sql问题:9(触发器专题 插入数据自动更新表数据)的更多相关文章
- 在论坛中出现的比较难的sql问题:37(动态行转列 某一行数据转为列名)
原文:在论坛中出现的比较难的sql问题:37(动态行转列 某一行数据转为列名) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
- 在论坛中出现的比较难的sql问题:5(row_number函数 分页、随机返回数据)
原文:在论坛中出现的比较难的sql问题:5(row_number函数 分页.随机返回数据) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路. 1.在inner join后, ...
- 在论坛中出现的比较难的sql问题:46(日期条件出现的奇怪问题)
原文:在论坛中出现的比较难的sql问题:46(日期条件出现的奇怪问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有 ...
- 在论坛中出现的比较难的sql问题:45(用户在线登陆时间的小时、分钟计算问题)
原文:在论坛中出现的比较难的sql问题:45(用户在线登陆时间的小时.分钟计算问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. ...
- 在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据)
原文:在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决 ...
- 在论坛中出现的比较难的sql问题:42(动态行转列 考勤时间动态列)
原文:在论坛中出现的比较难的sql问题:42(动态行转列 考勤时间动态列) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
- 在论坛中出现的比较难的sql问题:41(循环替换 循环替换关键字)
原文:在论坛中出现的比较难的sql问题:41(循环替换 循环替换关键字) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
- 在论坛中出现的比较难的sql问题:40(子查询 销售和历史库存)
原文:在论坛中出现的比较难的sql问题:40(子查询 销售和历史库存) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有 ...
- 在论坛中出现的比较难的sql问题:39(动态行转列 动态日期列问题)
原文:在论坛中出现的比较难的sql问题:39(动态行转列 动态日期列问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉 ...
随机推荐
- [webpack]webpack打包优化
1.import优化 a.tree-shaking 把没用到的代码删除掉,import 在生产环境下 会自动去除掉没用的代码 b.scope hosting 作用域提升,在webpack中会自动省略一 ...
- AnimatorSet学习示例代码
package com.loaderman.customviewdemo; import android.animation.AnimatorSet; import android.animation ...
- mxnet深度学习实战学习笔记-9-目标检测
1.介绍 目标检测是指任意给定一张图像,判断图像中是否存在指定类别的目标,如果存在,则返回目标的位置和类别置信度 如下图检测人和自行车这两个目标,检测结果包括目标的位置.目标的类别和置信度 因为目标检 ...
- js 点击列表li,获得当前li的id
html <ul id="demo"> <li id="li-1">li1</li> <li id="li- ...
- 【原创】主机不能访问虚拟机CentOS7中的站点
主机不能访问虚拟机CentOS7中的站点 ================================ 虚拟机上装好了centos7,并配好了nginx+php+mysql,但是本机就是无法访问. ...
- Qt编写自定义控件52-颜色下拉框
一.前言 这个控件写了很久了,元老级别的控件之一,开发之初主要是自己的好几个项目要用到,比如提供一个颜色下拉框设置对应的曲线或者时间颜色,视频监控项目中经常用到的OSD标签设置,这个控件的难度系数接近 ...
- 在Vue中用富文本编辑器(可以ctrl+c粘贴)
我司需要做一个需求,就是使用富文本编辑器时,不要以上传附件的形式上传图片,而是以复制粘贴的形式上传图片. 在网上找了一下,有一个插件支持这个功能. WordPaster 安装方式如下: 直接使用Wor ...
- 简介Python中用于处理字符串的center()方法
简介Python中用于处理字符串的center()方法 这篇文章主要介绍了简介Python中用于处理字符串的center()方法,是Python入门中的基础知识,需要的朋友可以参考下 center() ...
- LeetCode_125. Valid Palindrome
125. Valid Palindrome Easy Given a string, determine if it is a palindrome, considering only alphanu ...
- VS在项目范围内禁止关闭特定警告
要在项目范围内禁止警告,请在项目文件中定义要忽略的以分号分隔的警告代码列表.附加警告代码也$(NoWarn); 1.首先找到该项目的 .csproj 文件 >> 在<Property ...
