用Trigger规范insert, update的值


假设有表 A,

CREATE TABLE A(

ID INT NOT NULL IDENTITY(1,1),

ProductID INT NOT NULL,

RetailerID INT NOT NULL,

Date DATETIME NOT NULL

 

CONSTRAINT A_PK PRIMARY KEY (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, 用着很不方便:

CREATE TRIGGER A_T ON A FOR INSERT, UPDATE AS

BEGIN

UPDATE A

SET Date = SUBSTRING(CONVERT(VARCHAR, I.Date ,20),1,10)

FROM INSERTED I

WHERE I.ID = A.ID

END;

好了,INSERT 一条试试:

INSERT INTO A (ProductID, RetailerID, Date) VALUES (1,2,'2009-11-16 12:57:43');

可以看到:

(1 行受影响)

(1 行受影响)

即做了两次操作。。。

不知道还有没有其它方法没有。



相关阅读:
Windows Server 2008之AD RMS详细部署步骤
从黑客角度检验oracle数据库
JavaScript 学习笔记(四)
asp被杀毒软件误删的解决方法
Asp.NET 生成静态页面并分页的代码
WEB服务器Apache编译指南及高级技巧
Linux系统下挂载Windows分区的方法和技巧
网页制作教程:简单总结CSS的基础属性
用ASP对网页进行限制性的访问
javascript Firefox与IE 替换节点的方法
linux服务器硬盘IO读写负载查看方法
ORACLE的SQLPLUS常用命令
ASP.NET教程;一个合格的皮肤机制体系的实现
在多个页面使用同一个HTML片段的代码
快速导航

Copyright © 2016 phpStudy |