Besoin d'un champ date-heure dans MS SQL qui se met automatiquement à jour lorsque l'enregistrement est modifié
J'ai besoin de créer un nouveau champ DATETIME dans MS-SQL qui contient toujours de la date où le dossier a été créé, et qu'il doit ensuite mettre à jour automatiquement à chaque fois que l'enregistrement est modifié. J'ai entendu des gens dire que j'ai besoin d'un déclencheur, ce qui est très bien, mais je ne sais pas comment l'écrire. Quelqu'un pourrait contribuer avec la syntaxe d'un élément déclencheur pour effectuer cette opération?
Dans MySQL, il doit faire exactement la même que celle de MySQL déclaration:
ADD `modstamp` timestamp NULL DEFAULT CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
Voici quelques exigences:
- Je ne peux pas modifier mon relevé de mise à JOUR pour définir le champ lors de la modification de la ligne, parce que je n'ai pas le contrôle de l'application de la logique qui écrit pour les enregistrements.
- Idéalement, j'aurais pas besoin de connaître le nom de tous les autres colonnes de la table (comme la clé primaire)
- Il doit être court et efficace, car il arrivera très souvent.
source d'informationauteur Jesse Barnum
Vous devez vous connecter pour publier un commentaire.
MSSQL, en fait, n'ont pas un moyen de définir une valeur par défaut pour la mise à JOUR.
Si vous avez besoin d'ajouter une colonne avec la valeur par défaut pour l'insertion:
Et ajouter un Trigger sur la table:
Et oui, vous devez spécifier une colonne d'identité pour chaque déclencheur.
ATTENTION: prendre soin lors de l'insertion de colonnes sur les tables où vous ne connaissez pas le code de l'application. Si votre application a INSÉRER des VALEURS de commande sans définition d'un champ, il va augmenter les erreurs, même avec la valeur par défaut sur les nouvelles colonnes.
Bon, j'ai toujours envie de garder une trace de pas que lorsque quelque chose s'est passé, mais qui a fait ça!
Permet de créer une table de test dans [la base de données tempdb] nommé [nains]. Au préalable, un travail, une institution financière, nous gardons la trace de insérées (créer) de la date et de mise à jour (modifier) date d'.
Pour les mises à jour, mais les tables inserted et deleted existent. J'ai choisis de rejoindre sur le insérée pour la mise à jour.
Dernier mais non le moindre, vous permet de tester le code. N'importe qui peut taper un non testé instruction TSQL. Cependant, j'ai toujours le stress test pour mon équipe!
La sortie. J'ai attendu 10 secondes entre l'insert et le supprimer. Bonne chose est que, quand et par qui sont tous deux capturés.
Cela est possible depuis SQL Server 2016 en utilisant
PERIOD FOR SYSTEM_TIME
.C'est quelque chose qui a été introduite pour le temporel des tables, mais vous n'avez pas à utiliser temporelle tables à utiliser.
Un exemple ci-dessous
Qu'il a certaines limites.
MaxDateTime2
ci-dessus) qui est complètement inutile pour ce cas d'utilisation. Mais il peut être marqué comme caché le rendant plus facile à ignorer.