2010-03-16 12 views
23

Łączę prostą testową bazę danych do nauki MVC z. Chcę dodać pole DateTime, aby pokazać, kiedy rekord został utworzony.Dokonywanie automatyczne pole DateTime w bazie danych?

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

Mam wrażenie, że tego typu przechwytywania DateTime można zrobić automatycznie - ale to wszystko, co mam, uczucie. Czy można to zrobić? A jeśli tak, to w jaki sposób?

Podczas gdy jesteśmy na temat: jeśli chciałbym dołączyć inne pole, które przechwyciło DateTime, kiedy rekord był OSTATNIO ZAKTUALIZOWANY, jak to zrobię.

Mam nadzieję, że nie zrobię tego ręcznie.

Dziękujemy

Mike

Odpowiedz

30

Musisz ustawić "wartość domyślna" dla pola daty do getdate(). Wszelkie zapisy wstawione do tabeli automatycznie przyjmą datę wstawienia jako wartość dla tego pola.

Lokalizacja właściwości "domyślna wartość" zależy od wersji programu SQL Server Express, który jest uruchomiony, ale powinien być widoczny, jeśli podczas edytowania tabeli wybierzesz pole daty tabeli.

+0

Zmieniłem pole na DateTime2 (7) i ustawiłem GETDATE() na wartość domyślną. Jednak gdy przeglądasz zawartość tabeli i próbujesz uzupełnić dane, otrzymuję komunikat "nie mogę zawierać błędu null" podczas przechodzenia z pola DateTime - oczywiście nic w nim nie wstawiłem, ponieważ oczekiwałem, że będzie automatycznie aktualizowany . Również używam Visual Web Developer 2008 Express Edition (który, jak sądzę, korzysta z pakietu bazy danych SQL Express). – RocketGoal

+0

@Mike - spraw, aby kolumna była również zerowalna, a następnie powinna działać –

+0

Znalazłem problem - nie ustawiłem kolumny ID na Tożsamość, więc ogromna wiadomość wskazywała mi na niepoprawność kolumny ID, a nie na moją datę. Nauczyłem się. Przeprosiny. Ale działa. Wielkie dzięki. – RocketGoal

21

Tak, oto przykład:

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

można wstawić do tabeli bez wskazywania CreatedDate i updatedDate kolumny:

INSERT INTO myTable (col1) VALUES (1) 

Albo użyć domyślnego kluczowe:

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

Następnie utwórz wyzwalacz do aktualizacji kolumny 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

Dzięki, ale jestem naprawdę na początku mojego doświadczenia SQL, więc używam IDE, aby pomóc mi zrobić stół. – RocketGoal

Powiązane problemy