J'ai besoin de créer une procédure stockée qui émule une séquence TSQL. Autrement dit, il donne toujours une valeur entière distincte croissante à chaque appel. De plus, si un entier est passé, il devrait retourner cette valeur s'il n'y a jamais eu de résultat supérieur ou le prochain entier le plus élevé disponible. Il va sans dire qu'il peut y avoir plusieurs clients appelant ce SP en même temps.
Étant donné une table MetaInfo avec les colonnes MetaKey varchar (max) et MeatValueLong bigInt. Il est prévu que la ligne avec la méta-clé «Internal-ID-Last» contienne la dernière valeur la plus élevée attribuée. J'ai créé la procédure stockée suivante:
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
Ma question est simplement: cette procédure stockée fonctionne-t-elle comme prévu (tous les appelants se verront attribuer un résultat unique)?