identity
に組み込まれているため、パーティションの一意のIDを生成することは容易ではありません。代替案がありますが、以下は実装が非常に簡単で、並行性環境で動作します。
テーブルの構造は次のとおりです。SQL Serverはその値を処理しているよう
IF OBJECT_ID('[dbo].[DataSource]') IS NOT NULL
BEGIN;
DROP TABLE [dbo].[DataSource];
END;
CREATE TABLE [dbo].[DataSource]
(
[RecordID] INT PRIMARY KEY IDENTITY (1,1)
,[DateAdded] DATE CONSTRAINT DF_DataSource_DateAdded DEFAULT (GETUTCDATE())
,[value] NVARCHAR(128)
);
[RecordID]
は常に一意になります。値が挿入されるときを知るために、[DateAdded]
列があります。この場合は、[value]
の列のみを設定する必要があります。
のは、我々は次のようなデータを持っているとしましょう:
INSERT INTO [dbo].[DataSource] ([DateAdded], [value])
VALUES ('2017-08-23 00:00:00', 'value 01')
,('2017-08-23 00:00:00', 'value 02')
,('2017-08-24 00:00:00', 'value 03')
,('2017-08-25 00:00:00', 'value 05')
,('2017-08-25 00:00:00', 'value 06')
,('2017-08-25 00:00:00', 'value 07');
カスタムID
カラムは次の文で、読み込み時に作成されます。
SELECT *
,CONCAT(CONVERT(CHAR(8), [DateAdded],112), ROW_NUMBER() OVER (PARTITION BY [DateAdded] ORDER BY [RecordID])) AS [ID]
FROM [dbo].[DataSource] ;
はい、あなたはデータベースのcustom ID
を実現させず、必要なときに毎回生成する必要がありますが、必要はありませんキーの一意性を扱うためにこれ以上心配する必要はありません。
お困りですか? –
これは[XY問題](http://xyproblem.info)のようです。このユニークなIDは何のために必要ですか?そして、なぜその特定のフォーマットと動作を持たなければならないのですか? – InBetween
Ah sry、タイトルのとおり:私はauto_incrementのようなものを探していますが、この特定のフォーマットです。 SQLサーバがINSERT INTOでジョブを実行する可能性もあります – emuuu