既存の VFP データベース (dbf ファイル) があり、それを SQL Server 2008 に移行したいと考えています。
問題は :
VFP データベースのテーブル « Invoices » には、次の形式の主キーがあります。
year+counter
例: 2013 年 --> 201300001, 201300002,…,20130000n 2012 年 --> 201200001, 201200002, 201200003,…..20120000n など
カウンターは毎年初めにリセットする必要があります
これらのシーケンスを計算するには、別の dbf テーブルからカウンターを取得し、インクリメントして保存します。ここでは、競合と重複キーのリスクに注意する必要があります。ID 列と、それが同時実行を回避する方法についてよく耳にしました。SQL自体がID列の計算を処理するためです。
言われたことに基づいて、これに対する解決策はありますか?
ありがとうございました。
こんにちはuser2511414、次のようにトリガーの代わりに試しました:
CREATE TRIGGER AutoIncrement_Trigger ON dblease.dbo.testAutoinc
instead OF INSERT AS
BEGIN
DECLARE @ach CHAR
DECLARE @ch CHAR
DECLARE @num INT
DECLARE @an INT
SET @an = year(GetDate())
SET @ach = Convert(char(4),@an)
select @num = SUBSTRING(MAX(id),5,5) FROM dblease.dbo.testAutoinc having SUBSTRING(MAX(id),1,4) = @ach
INSERT INTO dblease.dbo.testAutoinc (id,designation,date) SELECT (@ach+CONVERT(VARCHAR(6),(@num+1))),inserted.designation, GetDate() FROM inserted
END
ただし、次のクエリを実行すると:
insert into testAutoinc (designation, date) values ('TEST','25/06/2013');
次のエラーが表示されます:列 'Id'、テーブル 'dblease.dbo.testAutoinc' に値 NULL を挿入できません。列はヌルを許可しません。INSERT は失敗します。ステートメントは終了されました。