Je dois ajouter un déclencheur qui devrait mettre à jour une colonne en utilisant les chaînes de format suivantes:, <current_date>_<per_day_incremental_id>
par exemple 2015-10-01_36
. Les identifiants doivent être incrémentiels et les écarts sont autorisés.
Mon approche est plutôt naïve: créer un tableau avec la date actuelle et la valeur de séquence actuelle et y conserver un seul enregistrement:
create table DailySequence
(
date date,
sequence int
)
insert into DailySequence values (getdate(), 1);
CREATE TRIGGER MakeHumanReadableId ON dbo.AuditMeasures
FOR INSERT
AS
DECLARE @ret int;
DECLARE @tempDate date;
DECLARE @nowDate date;
SET @nowDate = getdate();
SELECT @ret = t.sequence, @tempDate = t.date from DailySequence as t;
IF @nowDate = @tempDate
BEGIN
SET @ret = @ret + 1;
UPDATE DailySequence
SET sequence = @ret;
END
ELSE
BEGIN
SET @ret = 0;
UPDATE DailySequence
SET sequence = @ret, date = @nowDate;
END
UPDATE AuditMeasures
SET [HumanReadableId] = CAST(@nowdate AS VARCHAR(10)) + '_' + CAST(@ret AS VARCHAR(10));
FROM inserted
INNER JOIN AuditMeasures On inserted.id = AuditMeasures.id
GO
Des questions:
- Y a-t-il des écueils pour ma solution? Par exemple, le code à l'intérieur du déclencheur ne s'exécutera pas à l'intérieur d'une transaction, donnant ainsi des valeurs incorrectes.
- Suis-je en train de manquer une meilleure solution?
IDENTITY
qui n'est pas réinitialisé tous les jours et l'ajouter à la date actuelle. Chaque nouveau jour aura l'air d'avoir un "écart" de plus en plus grand, mais l'écart est autorisé, n'est-ce pas? C'est une plaisanterie, bien sûr, mais cela souligne que vous devez avoir omis certaines exigences.