以下の情報を含むSQLテーブルにカスタムIDを作成したいと考えています。MS SQLでカスタム固有IDを生成
ID = 'SRIG' + 'DDMMYY' + 5桁の数字です。
あなたがそうのように、同様に計算列を使用することができます。表詳細
CREATE TABLE SR
(
SRREQID NVARCHAR(100) PRIMARY KEY,
-- Your @Entity ID might be another candidate here
SRID INT
);
SQLクエリ
DECLARE @EntityId INT;
DECLARE @SRREQID NVARCHAR(100);
-- BEGIN TRAN
SELECT @EntityId = ISNULL(MAX(SRID),0) FROM SR;
Select @SRREQID = 'SRIC'+RIGHT('00'+CONVERT(varchar,datepart(YY,getdate())),2)+
RIGHT('00'+CONVERT(varchar,datepart(MM,getdate())),2)+
RIGHT('00'+CONVERT(varchar,datepart(DD,getdate())),2)+
RIGHT('000000'+ CONVERT(NVARCHAR(10), @EntityId+1),6);
INSERT INTO SR(SRREQID,SRID) VALUES(@SRREQID,@EntityId+1);
SELECT * FROM SR;
-- COMMIT TRAN;
クエリ出力
SRREQID SRID
SRIC160518000100 100
計算列は、私が行くだろう方向です。ただし、ジョブを使用してID列を再シードする代わりに、udfを使用して列を計算し、 'getdate()'の既存のレコードの 'count()'として数値を計算します。このようにして、主キーをID列として保持して、より簡単に使用できます。 –
優秀なアイデア。公平ではあるが、これはデータの数によっては1つの挿入ごとにインデックスのシーク/スキャンが行われるため、ある時点でパフォーマンスが問題になる可能性があることを意味します。また、2つの並行トランザクションが同じ値を生成することが可能かどうかはわかりません。しかし、論理的に言えば、これは素晴らしい考えです。必要とされる余分なステップとメンテナンス(私の場合は仕事のような)が少ないほど、私の本の方が良い。 :) – Kahn
もちろん、このデータを計算カラムに格納する必要はありません。テーブルにすでにIDカラムと作成カラムがある場合は、ビューを使用してこのカラムのデータを計算することができますその一部はselectステートメントです。しかし、一般的に、パフォーマンスの問題について人々が話しているときは、挿入/更新の選択ではなく選択されています。 –