Ich muss einen Trigger hinzufügen, der eine Spalte mit den folgenden Formatzeichenfolgen aktualisieren soll: <current_date>_<per_day_incremental_id>
z 2015-10-01_36
. IDs müssen inkrementell sein und Lücken sind zulässig.
Mein Ansatz ist eher naiv: Erstellen Sie eine Tabelle mit dem aktuellen Datum und dem aktuellen Sequenzwert und führen Sie einen einzelnen Datensatz darin:
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
Fragen:
- Gibt es Fallstricke für meine Lösung? Beispielsweise wird Code innerhalb des Triggers nicht innerhalb einer Transaktion ausgeführt, wodurch falsche Werte angegeben werden.
- Vermisse ich eine bessere Lösung?
IDENTITY
, die nicht jeden Tag zurückgesetzt wird, und sie an das aktuelle Datum anhängen. Jeder neue Tag wird so aussehen, als hätte er eine immer größere "Lücke", aber die Lücke ist erlaubt, nicht wahr? Es ist natürlich ein Witz, aber es zeigt, dass Sie einige Anforderungen weggelassen haben müssen.