共有C#原生ID(流水番号)生成機能実現
5883 ワード
一、非貯蔵プロセスによって生成された流水番号
二、ストレージプロセスはフロー番号1を生成し、まずデータベースにフロー番号を格納するテーブルを作成する
上のコードの中でCateフィールドは流水番号の頭で、下の記憶の過程の中でパラメータの方式で入ることができて、私の定義は2文字で、これは具体的な必要によってDateNoフィールドを変更して日付情報Seqフィールドを取得するために流水番号で、しかし最終的に生成した流水番号はこの3つのフィールドの加算です
2、ストレージ・プロシージャの作成
このストレージ・プロシージャの最終出力の結果は、AA 0710310000001の前の2つが入力パラメータであり、中間の4つが年の後の2つと月であり、最後の6つが6桁の数字の流水番号である.また、上記のストレージ・プロシージャを変更して、必要に応じたストリーム番号を生成することもできます.
/// <summary>
///
/// </summary>
public static class DataBaseGenerator
{
/// <summary>
///
/// </summary>
private static Int64 seed = Int64.Parse(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalMilliseconds.ToString("0"));
/// <summary>
///
/// </summary>
/// <returns></returns>
public static Int64 GetPrimaryKey()
{
return Interlocked.Increment(ref seed);
}
}
二、ストレージプロセスはフロー番号1を生成し、まずデータベースにフロー番号を格納するテーブルを作成する
CREATE TABLE [dbo].[NumSeq] (
[Cate] [varchar] (2) NOT NULL ,
[DateNo] [varchar] (4) NOT NULL ,
[Seq] [int] NULL ,
[CrTime] [datetime] NOT NULL
)
上のコードの中でCateフィールドは流水番号の頭で、下の記憶の過程の中でパラメータの方式で入ることができて、私の定義は2文字で、これは具体的な必要によってDateNoフィールドを変更して日付情報Seqフィールドを取得するために流水番号で、しかし最終的に生成した流水番号はこの3つのフィールドの加算です
2、ストレージ・プロシージャの作成
CREATE PROC dpPMT_SGetMaintainSeq
@MaintainCate VARCHAR(2)
AS
--*********************** *************************************************
DECLARE @MaintainNo VARCHAR(12)
IF NOT EXISTS(SELECT
*
FROM
NumSeq
WHERE
Cate=@MaintainCate AND DATEDIFF(DAY,CrTime,GETDATE())=0)
BEGIN
INSERT INTO
NumSeq(Cate,DateNo,Seq)
values(@MaintainCate,RIGHT(CONVERT(VARCHAR(4),YEAR(GETDATE())),2)+
REPLICATE('0',2-LEN(MONTH(GETDATE())))+CONVERT(VARCHAR(2),MONTH(GETDATE())),0)
END
ELSE
BEGIN
UPDATE
NumSeq
SET
Seq=Seq+1
WHERE
Cate=@MaintainCate AND DateNo=RIGHT(CONVERT(VARCHAR(4),YEAR(GETDATE())),2)+
REPLICATE('0',2-LEN(MONTH(GETDATE())))+CONVERT(VARCHAR(2),MONTH(GETDATE()))
END
--************************ ***************************************************************
SELECT
@MaintainNo=Cate+DateNo+REPLICATE('0',6-LEN(Seq))+CONVERT(VARCHAR(6),Seq)
FROM
NumSeq
WHERE
Cate=@MaintainCate AND DateNo=RIGHT(CONVERT(VARCHAR(4),YEAR(GETDATE())),2)+
REPLICATE('0',2-LEN(MONTH(GETDATE())))+CONVERT(VARCHAR(2),MONTH(GETDATE()))
SELECT @MaintainNo
このストレージ・プロシージャの最終出力の結果は、AA 0710310000001の前の2つが入力パラメータであり、中間の4つが年の後の2つと月であり、最後の6つが6桁の数字の流水番号である.また、上記のストレージ・プロシージャを変更して、必要に応じたストリーム番号を生成することもできます.