はるかに簡単な方法は、SQL ServerにINT IDENTITY
列を使用して連続する数値のディッシングを処理させ、トリガーを使用して、別の列に必要な特定の形式を作成することです。
したがって、この表を考えると:
CREATE TABLE SampleTable
(ID INT IDENTITY, SaleDate DATE, ComputedPK VARCHAR(25) )
このようなトリガーを使用してComputedPK
、ID
(自動番号、SQL Serverによって処理される)から、およびSaleDate
日付列としてを計算できます。
CREATE TRIGGER trgSampleTableInsert
ON dbo.SampleTable FOR INSERT
AS
UPDATE dbo.SampleTable
SET ComputedPK = CAST(YEAR(i.SaleDate) AS CHAR(4)) + '/' + DATENAME(MONTH, i.SaleDate) + '/' + RIGHT('000000' + CAST(i.ID AS VARCHAR(6)), 6)
FROM dbo.SampleTable s
INNER JOIN INSERTED i ON s.ID = i.ID
ただし、このアプローチは毎月1から始まるわけではありませんが、本当に必要ですか?連番は(数か月間でも)十分ではありませんか?
更新:もちろん、SQL Server 2012を使用している場合(使用しているSQL Serverのバージョンを指定していません...)-SEQUENCE
オブジェクトを使用して連続番号を処理できます-さらに、それをリセットすることもできます月の初めごとに再び1にシーケンスします...。