ここには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
)
従業員に一列を追加します。あなたはEmpCode
でleft(newid(), 10)
からデフォルトのランダムな値のままにされないことを確認するためにトランザクションで実行する必要があります。
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
computed columnしてください。
表の定義:
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
)
は、従業員に1行を追加します。
insert into Employees (DistrictCode) values ('AB')
自動インクリメント列を使用するか、一度に1つだけ実行するようにクエリをトランザクションにします。 – Joe
自動インクリメント。 – RKh
指定された地区の最大IDを取得しますか?あなたはそのIDで何をしていますか? ID列はID列ですか?いつクエリを実行しますか?挿入直後に新しく作成したIDを何かに使用したいのですか? –