Microsoft SQL-Server: Alle Weg, zu sagen, Wann ein Datensatz angelegt wurde?
Unser Kunde möchte Bestellung durch den Datensatz-ERSTELLUNGSDATUM. Mir erscheint dies wie eine system-variable, die irgendeine Art von meta-Daten für die Aufzeichnung selbst.
Gibt es eine Möglichkeit zu sagen, Wann ein Datensatz angelegt wurde, ohne tatsächlich die Schaffung eines datetime-Feld mit Standardwert GetDate() und hoffe, dass sich niemand ändert es?
Du musst angemeldet sein, um einen Kommentar abzugeben.
NÖ.
Müssen Sie eine Spalte für diese.
Vorstellen, wie groß die meta-Daten werden, wenn Sie benötigt, um einen Datensatz für jeden Datensatz für die Schöpfung! Würde Sie auch behalten wollen meta-Daten auf Ihre meta-Daten, so dass Sie wissen, wenn die meta-Daten aktualisiert wurde? Die Räume können schnell eskalieren.
SQL-Server hält einige stats, aber etwas, diese spezifische benötigen, um von einem Benutzer-definierten Bereich.
Als Seite beachten, können Sie machen es schwieriger zu manipulieren mit dem Datum auf Ihrem angelegten Feld, wenn Sie die Verwendung einer lookup-Tabelle. Erstellen Sie eine Tabelle "TableName_CreateDate" und verwenden Sie die PK von Ihrem aktuellen Tabelle und ein date-Wert. Dein date ist in einem separaten Ort und weniger wahrscheinlich, um geändert werden, aber man kann immer noch
JOIN
bekommen Sie Ihre Bestellung. Müssen Sie einen trigger erstellen, um dieses update mit den neuen Werten.Wenn Sie nur wollen, die DATUM und brauchen nicht einen datetime-Wert, können Sie einen Schritt weiter gehen und habe nur eine Tabelle von Daten, und eine lookup-Tabelle, joins zu. I. e.:
Table->Table.PK + Date.Pk -> DateTable
Dies würde sparen Sie eine Menge Speicherplatz auf der Festplatte, wenn Sie eine Menge von Zeilen (4 bytes pro Zeile glaube ich).
Die creationdate-Feld Hinzugefügt werden soll. Sie fixieren die 'Hoffnung, dass niemand ändert es" Teil, indem Sie hinzufügen einen trigger on update, der nicht zulassen, dass das Feld aktualisiert werden, je.
Nein, auch nicht in den system-Tabellen meines Wissens. Sie könnte Graben durch alte Transaktionsprotokolle ich bin mir sicher, aber nativ keine.
Einmal kam ich mit einer Art von situation, in der Reihenfolge der Zeilen einer Tabelle erforderlich ist, aber es ist kein Zeitstempel (CreateDateTime, UpdateDateTime, ..., etc.) Spalte verfügbar ist. Also nur Daten, die ich hatte, war das Transaktionsprotokoll. Lesen Sie die Transaktion direkt einloggen war nicht hilfreich, da es nicht einfach ist, zu analysieren. Also, ich fand ein Programm namens "ApexSQL Log", das war sehr hilfreich. Es hat alle Filter-Optionen, und Sie können Lesen Sie alle Protokolldaten ohne hardcore-Operationen. Diese Lösung war zwar befriedigend für mich, es hat einen Nachteil: Sie können nur filter Datum (Beginn-und Endzeit) nach der Transaktion-operation. Wenn Sie auf der Suche nach einer query-operation, zum Beispiel ein insert, das ist gekapselt in einer Transaktion, können Sie nicht abgerufen werden, die genaue Uhrzeit einfügen (zumindest konnte ich keinen Weg finden), nur die Transaktion. Wenn Ihre Operationen sind alle atomic, dann können Sie buchstäblich alle Zeile erstellen aktuelle Informationen.
Wenn er nur will, um durch Sie, können Sie erwägen, ein timestamp Spalte.
Es nicht den Bezug zu einem realen date, aber Sie können die Sortierung auf Sie.
timestamp
Felder werden automatisch aktualisiert bei jedem update auf eine Zeile. Diese Pausen sein "und stellen Sie sicher, dass es nicht ändern" - Funktion ist ziemlich gründlich.