sql >> データベース >  >> RDS >> Sqlserver

並行環境での max(ID) の処理

    ここにあなたが望むことをする2つの方法があります。 EmpCode で一意制約違反が発生する可能性があるという事実 心配するのはあなたに任せます:)

    1. scope_identity() を使用します 最後に挿入された ID を取得し、それを使用して EmpCode を計算します .

    テーブル定義:

    create table Employees
    (
      ID int identity primary key,
      Created datetime not null default getdate(),
      DistrictCode char(2) not null,
      EmpCode char(10) not null default left(newid(), 10) unique
    )
    

    Employees に 1 行追加します。 left(newid(), 10) からのデフォルトのランダム値が残らないように、トランザクションで実行する必要があります。 EmpCode で :

    declare @ID int
    
    insert into Employees (DistrictCode) values ('AB')
    
    set @ID = scope_identity()
    
    update Employees
    set EmpCode = cast(year(Created) as char(4))+DistrictCode+right([email protected], 4)
    where ID = @ID 
    

    2. EmpCode を作成 計算列 .

    テーブル定義:

    create table Employees
    (
      ID int identity primary key,
      Created datetime not null default getdate(),
      DistrictCode char(2) not null,
      EmpCode as cast(year(Created) as char(4))+DistrictCode+right(10000+ID, 4) unique
    )
    

    Employees に 1 行追加:

    insert into Employees (DistrictCode) values ('AB')
    


    1. DapperおよびOracleClobタイプ

    2. 二重のメールを送信するPHPMailer

    3. MySQL::カンマ区切りの文字列から選択

    4. SQLServerが一意でないクラスター化インデックスに4バイト整数を追加するのはなぜですか