I have been instructed to create an increasing serial number per day for the project. To do this, you need to create several processes (theoretically on several machines). It ends like
[date]_[number]
as
20101215_00000001
20101215_00000002
...
20101216_00000001
20101216_00000002
...
Since I am using SQL Server (2008) in this project, I tried to do this using T-SQL / SQL magic. This is where I am now:
I created a table containing a serial number like this:
CREATE TABLE [dbo].[SequenceTable](
[SequenceId] [bigint] IDENTITY(1,1) NOT NULL,
[SequenceDate] [date] NOT NULL,
[SequenceNumber] [int] NULL
) ON [PRIMARY]
My naive solution is still a trigger after insertion that sets SequenceNumber:
CREATE TRIGGER [dbo].[GenerateMessageId]
ON [dbo].[SequenceTable]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @InsertedId bigint;
SET @InsertedId = (SELECT SequenceId FROM Inserted)
DECLARE @SequenceNumber int;
SET @SequenceNumber = (
SELECT SequenceNumber FROM
(
SELECT SequenceId, ROW_NUMBER() OVER(PARTITION BY SequenceDate ORDER BY SequenceDate ASC) AS SequenceNumber
FROM SequenceTable
) tmp
WHERE SequenceId = @InsertedId
)
UPDATE
SequenceTable
SET
SequenceTable.SequenceNumber = ''+@SequenceNumber
FROM
SequenceTable
INNER JOIN
inserted ON SequenceTable.SequenceId = inserted.SequenceId
END
, , : , . , . , , , , , (.. , " 10 000 " ).
, , SQL , , , - . ?