2010-03-16 44 views
23

Tôi đang tập hợp một cơ sở dữ liệu thử nghiệm đơn giản để tìm hiểu MVC. Tôi muốn thêm trường DateTime để hiển thị khi bản ghi được TẠO.Tạo trường DateTime trong cơ sở dữ liệu tự động?

ID = int 
Name = Char 
DateCreated = (dateTime, DateTime2..?) 

Tôi có cảm giác rằng loại chụp DateTime này có thể được thực hiện tự động - nhưng đó là tất cả những gì tôi có, một cảm giác. Nó có thể được thực hiện? Và nếu thế thì sao?

Trong khi chúng tôi đang ở trên chủ đề: nếu tôi muốn bao gồm một trường khác đã ghi lại DateTime khi bản ghi đã được cập nhật LAST thì tôi sẽ làm như thế nào.

Tôi hy vọng không thực hiện việc này theo cách thủ công.

Rất cám ơn

Mike

Trả lời

30

Bạn cần phải thiết lập các "giá trị mặc định" cho các trường ngày để getdate(). Bất kỳ bản ghi nào được chèn vào bảng sẽ tự động có ngày chèn làm giá trị của chúng cho trường này.

Vị trí của thuộc tính "giá trị mặc định" phụ thuộc vào phiên bản SQL Server Express bạn đang chạy, nhưng nó sẽ hiển thị nếu bạn chọn trường ngày của bảng khi chỉnh sửa bảng.

+0

Tôi đã thay đổi trường thành DateTime2 (7) và đặt GETDATE() vào giá trị mặc định. Tuy nhiên, khi xem nội dung của bảng và cố gắng kết thúc trong dữ liệu tôi nhận được 'không thể chứa lỗi null' khi tabbing ngoài trường DateTime - rõ ràng là tôi chưa đặt bất kỳ thứ gì vào đó như tôi mong đợi nó sẽ được cập nhật tự động . Ngoài ra, tôi đang sử dụng Visual Web Developer 2008 Express Edition (mà tôi tin rằng sử dụng gói cơ sở dữ liệu SQL Express). – RocketGoal

+0

@Mike - làm cho cột nullable là tốt và sau đó nó sẽ làm việc –

+0

Tôi tìm thấy vấn đề - Tôi đã không đặt cột ID của tôi để Identity do đó, tin nhắn rất lớn đã thực sự chỉ cho tôi vào cột ID của tôi là không chính xác và không DateTime của tôi. Tôi đã học được. Xin lỗi. Nhưng nó đã có tác dụng. Cảm ơn nhiều. – RocketGoal

21

Vâng, đây là một ví dụ:

CREATE TABLE myTable (col1 int, createdDate datetime DEFAULT(getdate()), updatedDate datetime DEFAULT(getdate())) 

bạn có thể chèn vào bảng mà không ghi rõ CreatedDate và updatedDate cột:

INSERT INTO myTable (col1) VALUES (1) 

Hoặc sử dụng DEFAULT keyword:

INSERT INTO myTable (col1, createdDate, updatedDate) VALUES (1, DEFAULT, DEFAULT) 

Sau đó, tạo trình kích hoạt để cập nhật cột updatedDate:

CREATE TRIGGER dbo.updateMyTable 
ON dbo.myTable 
FOR UPDATE 
AS 
BEGIN 
    IF NOT UPDATE(updatedDate) 
     UPDATE dbo.myTable SET updatedDate=GETDATE() 
     WHERE col1 IN (SELECT col1 FROM inserted) 
END 
GO 
+0

Cảm ơn, nhưng tôi thực sự bắt đầu trải nghiệm SQL của mình, vì vậy tôi đang sử dụng IDE để giúp tôi tạo một bảng. – RocketGoal

Các vấn đề liên quan