CREATE TABLE Customer
(
customerID int identity (500,20) CONSTRAINT
.
.
dateCreated datetime DEFAULT GetDate() NOT NULL,
dateModified datetime DEFAULT GetDate() NOT NULL
);当我插入一条记录时,dateCreated和dateModified被设置为默认日期/时间。当我更新/修改记录时,dateModified和dateCreated保持不变?我该怎么办?
显然,我需要dateCreated值以保持第一次插入的值,并且当记录字段中发生更改/修改时,dateModified保持变化。
换句话说,你能写一个简单的快速触发器吗?我还不是很了解。
发布于 2010-04-10 03:43:29
您可能希望创建update触发器来为您更新此值
看一下类似这样的东西
CREATE TABLE Vals(
ID INT,
Val VARCHAR(10),
DateCreated DATETIME DEFAULT GetDate(),
DateUpdated DATETIME DEFAULT GetDate()
)
GO
CREATE TRIGGER Upd ON Vals
AFTER UPDATE
AS
UPDATE Vals
SET DateUpdated = GetDate()
FROM Vals INNER JOIN
inserted ON Vals.ID = inserted.ID
Go
INSERT INTO Vals (ID, Val) SELECT 1, 'A'
SELECT *
FROM Vals
GO
UPDATE Vals SET Val = 'B'
SELECT *
FROM Vals
GO
DROP TABLE Vals
GO发布于 2010-04-10 03:43:53
UPDATE
Customer
SET
... = NewValue,
dateModified = DEFAULT
WHERE
...我会使用它而不是dateModified = GETDATE(),所以GETDATE()只被使用一次(假设你想在将来改成GETUTCDATE() )
或者触发器,如果你有多个更新路径...?
发布于 2010-04-10 04:20:28
当我插入一条记录时,dateCreated和dateModified被设置为默认日期/时间。当我更新/修改记录时,dateModified和dateCreated保持不变?我该怎么办?
列默认值仅在INSERT时使用,而不是由UPDATE使用。如果您不在INSERT中提供列或发出DEFAULT关键字,INSERT命令将使用默认值。
INSERT INTO Customer (col1, col2)
VALUES (..,..) ---get default for dateCreated & dateModified
INSERT INTO Customer (col1, col2,dateCreated)
VALUES (..,..,DEFAULT) ---get default for dateCreated & dateModified
INSERT INTO Customer (col1, col2,dateCreated,dateModified)
VALUES (..,..,DEFAULT,DEFAULT) ---get default for dateCreated & dateModified
INSERT INTO Customer (col1, col2,dateCreated,dateModified)
VALUES (..,..,'1/1/2010',DEFAULT) ---only get default for dateModified
INSERT INTO Customer (col1, col2,dateCreated,)
VALUES (..,..,'1/1/2010') ---only get default for dateModified
INSERT INTO Customer (col1, col2,dateCreated,dateModified)
VALUES (..,..,'1/1/2010','1/2/2010') ---no defaults for dateCreated & dateModifie我喜欢使用位于程序顶部的局部变量集:
DECLARE @RunDate datetime
SET @RunDate=GETDATE()然后我在过程中使用它,因此所有更改(即使在多个表上)都具有精确到毫秒的相同日期。我还希望dateModified列允许空值并且没有默认值,当它被插入时,它是被创建的而不是被修改的,当它被实际修改时,我将设置dateModified。
然后使用:
UPDATE Customer
SET importantColumn=
,dateModified = @RunDate
WHERE ...
UPDATE CustomerPrice
SET importantColumn=
,dateModified = @RunDate
WHERE ...https://stackoverflow.com/questions/2610370
复制相似问题