TSQLシーケンスをエミュレートするストアドプロシージャを作成する必要があります。つまり、呼び出しごとに常に増加する個別の整数値を提供します。さらに、整数が渡された場合、結果がこれまでにないか、利用可能な次に高い整数がなかった場合、その値を返す必要があります。言うまでもなく、このSPを同時に呼び出す複数のクライアントが存在する可能性があります。
列MetaKey varchar(max)およびMeatValueLong bigIntを持つ表MetaInfoが与えられます。「Internal-ID-Last」のMetaKeyを持つ行には、割り当てられた最後の最高値が含まれることが予想されます。次のストアドプロシージャを作成しました。
CREATE PROCEDURE [dbo].[uspGetNextID]
(
@inID bigInt
)
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRANSACTION
UPDATE MetaInfo WITH (ROWLOCK)
SET MetaValueLong = CASE
WHEN ISNULL(MetaValueLong,0) > @inID THEN MetaValueLong+1
ELSE @inID+1
END
WHERE MetaKey = 'Internal-ID-Last'
SELECT MetaValueLong
FROM MetaInfo
WHERE MetaKey = 'Internal-ID-Last'
COMMIT TRANSACTION
END
私の質問は、このストアドプロシージャが期待どおりに機能するかどうかです(すべての呼び出し元に一意の結果が割り当てられます)。