2016-04-07 9 views
0

Ich brauche einen Weg, um einen einzelnen Wert nur innerhalb eines eingefügten Feldes zu erzwingen, genauer gesagt ein DateTime-Feld, das immer auf das aktuelle Datum/die aktuelle Uhrzeit beim Einfügen gesetzt werden sollte. Ich arbeite an einer universitären Übung und sie wollen, dass alle Einschränkungen innerhalb der DB gemacht werden, normalerweise würde ich einfach eine DEFAULT GetDate() und immer DEFAULT für Einsätze verwenden, aber die Übungsanforderungen verhindern dies. nun für eine ganze Zahl kann ich das tun (ich habe die anderen Felder weggelassen, da sie bei der Hand auf die Frage irrelevant sind):Nur aktuelles Datum/Uhrzeit bei SQL Server-Einfügung zulassen

CREATE TABLE tester(
d INTEGER not null DEFAULT 3, 
CONSTRAINT chkd CHECK(d = 3) 
); 

aber was ich will, ist folgendes:

CREATE TABLE tester(
d DATETIME not null DEFAULT GETDATE(), 
CONSTRAINT chkd CHECK(d = ????????) 
); 

Das erneute Iterieren von GetDate() in check() löst einen Fehler bei Einfügungen aus, da die Mikrosekunden eine Nichtübereinstimmung verursachen. Also ich denke die erste Frage ist, ist das möglich? und wenn ja (hoffe ich) wie?

+2

Verwendung einen Auslöser füllen Sie das Feld mit der aktuellen Zeit arbeitet? –

+0

@RyanVincent Richtig thx, nicht sicher, warum ich nicht daran gedacht habe, verwende ich Trigger anderswo und es ist wirklich einfach so. –

Antwort

1

Basierend auf Ryans Kommentar bekam auf diese Antwort, die

CREATE TRIGGER trigger_date ON [dbo].[tester] 
FOR INSERT 
AS 
BEGIN 
    UPDATE tester SET d = GETDATE() WHERE id IN (SELECT id FROM INSERTED); 
END 
GO 
1

Verfolgen Sie nicht das Datum/die Uhrzeit in der Tabelle tester. Verwenden Sie stattdessen eine separate Tabelle mit einer Spalte, die auf die ID der Tabelle tester als Fremdschlüsseleinschränkung verweist. Die neue Tabelle wird eine weitere Spalte haben, eine DateTime Spalte. Beim Einfügen in die Tabelle tester kann ein Trigger ausgelöst werden, der eine Zeile in die neue Tabelle mit der ID der neu erstellten Zeile tester sowie das aktuelle Datum/die aktuelle Uhrzeit einfügt.

+1

Schöne Erweiterung von Ryans Kommentar Vorschlag, obwohl die separate Tabelle nicht notwendig ist, kann der Auslöser direkt auf die Tester-Tabelle –

+0

Ja, ich war mir nicht sicher, wie viel Sie diesen Wert isolieren müssen und sicherstellen, dass die Benutzer nicht haben Mechanismen, durch die sie es ändern könnten und so. –

Verwandte Themen