多くの場合、SQL Serverの番号シリーズから一意の識別子を取得する必要があります。私がしているのは、数値シリーズ名、最小値、最大値、現在の値を含むテーブルです。アトミック更新ステートメント?
Series Min Max Current
-------------------------------------------
Testseries 1 999 23
今、私は安全に現在の値をインクリメントして出力するUPDATE ... OUTPUT
ステートメントを使用すると思います。他のすべてのアプローチ(たとえば、UPDATE
現在、次にSELECT
)は、競合状態を遅かれ早かれ引き起こす可能性があります。 Series
として
DECLARE @newId INT
UPDATE Numberseries
SET
@newId = Current += 1
WHERE
Series = '...'
これは私が唯一の1つの行を更新するだろう任意の時点でのように動作しますが、主キーです:
は、今私は、次の構文がありますがわかりました。私の質問は:UPDATE ... OUTPUT
ステートメントのようなアトミックな操作で、2人のクライアントが同時呼び出しで同じ値を取得しないようにしますか?
[シーケンス](https://msdn.microsoft.com/en-us/library/ff878091.aspx)を参照してください。 SQL Serverはこの種のアクションをネイティブにサポートしています... – Shnugo
@Shnugoヒントはありがたいですが、残念ながら顧客はまだSQL Server 2008にいます。 –
@Shnugoありがとうございます。 –