2012-11-15 178 views
0

我正在使用SqlServer 2005.我想設置一個屬性(如默認值,但對於任何更改,而不僅僅是插入)將更新日期。換句話說,在每次更新和插入時,當前日期都會放在列中。這將如何實現?更新,更改日期

+0

每行中的日期或某個地方的單個日期? –

+0

Google「trigger」 – texasbruce

+1

您可能正在尋找[INSTEAD OF TRIGGER](http://msdn.microsoft.com/zh-cn/library/ms189799(v = sql.90).aspx)。 – ShyJ

回答

1

讓我們假設你有一個A表:

CREATE TABLE A (
    ID INT, 
    Name VARCHAR(20), 
    SomeDate DATE NULL) 

您可以創建觸發器:

CREATE TRIGGER INSTEAD_OF_A_INSERT 
ON A 
INSTEAD OF INSERT AS 
BEGIN 

INSERT INTO A (ID, Name, SomeDate) 
SELECT ID, Name, GETDATE() 
FROM inserted 

END 
GO 

CREATE TRIGGER INSTEAD_OF_A_UPDATE 
ON A 
INSTEAD OF UPDATE AS 
BEGIN 

UPDATE A 
SET SomeDate = GETDATE(), 
    Name = I.Name 
FROM A A1 JOIN INSERTED I ON A1.ID = I.ID 

END 
GO 

,這將給你想

INSERT INTO A (ID, Name) 
VALUES(1, 'John'); 

INSERT INTO A (ID, Name) 
VALUES(2, 'Jack'); 

UPDATE A 
SET Name = 'Jane' 

    SELECT * 
    FROM A 

這裏什麼是fiddle可以玩。

+0

謝謝。我讀過一些觸發器。這是做這件事的唯一方法,除了直接更新/插入值嗎?我試圖找到我的最佳選擇,雖然它似乎觸發器是標準。 – steventnorris

+0

如果您想在數據庫服務器級別執行此操作,這是我知道的唯一方法。 – ShyJ

+0

@steventnorris如果您可以通過存儲過程控制數據訪問,那麼如果您正確設置權限並控制那些可以繞過這些過程的用戶,您不一定會*需要觸發器。但是,如果你允許特設的DML,那麼是的,這是我的方式(當你考慮是否應該允許特設的DML)。 –

0

最簡單的(但不一定是最有效的)方法就是使用觸發器。

參見MSDN

您可以使用AFTER INSERT,UPDATEINSTEAD OF INSERT,UPDATE - 可以根據您的確切要求完成任務。