仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 684|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL网站制作之用Trigger标准insert, update的值

[复制链接]
第二个灵魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:15:37 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
MySQL这个名字是怎么来的已经不清楚了。基本指南和大量的库和工具带有前缀“my”已经有10年以上,而且不管怎样,MySQLAB创始人之一的的女儿也叫My。</p>假定有表A,
CREATETABLEA(
        IDINTNOTNULLIDENTITY(1,1),
        ProductIDINTNOTNULL,
        RetailerIDINTNOTNULL,
        DateDATETIMENOTNULL
        CONSTRAINTA_PKPRIMARYKEY(ProductID,RetailerID,Date)
);
我的意义是想让ProductID,RetailerID和Date(不包含小时,分钟等)成为主键。
即:某一天里,retailerID和ProductID是独一的。
SQLServer里,DateTime是能够存储小时、分钟等的,假如程序只要我本人写,我会标准输出的日期,让其只包括日期部分。但如果间接改数据库,就只要经由过程触发器来标准了。
Oracle和MySQL的触发器都有两个工具:NEW和OLD,但SQLServer没有,SQLServer有INSTERED和DELETED这两个逻辑表,详细可参考SQLServer的匡助。
在Oracle和MySQL里,只需用:
NEW.FieldName=XXX;
就能够变动INSERT或UPDATE的值了,在SQLServer里,今朝,我只晓得用UPDATE,用着很不便利:
CREATETRIGGERA_TONAFORINSERT,UPDATEAS
BEGIN
        UPDATEA
        SETDate=SUBSTRING(CONVERT(VARCHAR,I.Date,20),1,10)
        FROMINSERTEDI
        WHEREI.ID=A.ID
END;
好了,INSERT一条尝尝:
INSERTINTOA(ProductID,RetailerID,Date)VALUES(1,2,2009-11-1612:57:43);
能够看到:
(1行受影响)
(1行受影响)
即做了两次操纵。。。
不晓得另有没有别的办法没有。
Archive非常适合存储大量的独立的,作为历史记录的数据。因为它们不经常被读取。Archive拥有高效的插入速度,但其对查询的支持相对较差
第二个灵魂 该用户已被删除
沙发
 楼主| 发表于 2015-3-16 14:24:15 | 显示全部楼层
原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-20 09:10

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表