程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> 更多數據庫知識 >> 用Trigger規范insert, update的值

用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 行受影響)

即做了兩次操作。。。

不知道還有沒有其它方法沒有。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved