ฉันมีความต้องการในการสร้างขั้นตอนการจัดเก็บซึ่งจำลองลำดับ TSQL นั่นคือจะให้ค่าจำนวนเต็มที่แตกต่างเพิ่มขึ้นทุกครั้งที่โทร นอกจากนี้หากมีการส่งจำนวนเต็มควรส่งคืนค่านั้นหากไม่เคยได้ผลลัพธ์ที่ดีกว่าหรือจำนวนเต็มที่สูงสุดถัดไปที่มีอยู่ มันไปโดยไม่บอกว่าอาจมีลูกค้าหลายรายที่เรียกใช้ SP นี้ในเวลาเดียวกัน
รับ MetaInfo ตารางพร้อมคอลัมน์ MetaKey varchar (สูงสุด) และ MeatValueLong bigInt คาดว่าแถวที่มี MetaKey ของ 'Internal-ID-Last' จะมีค่าสูงสุดที่กำหนดล่าสุด ฉันสร้างกระบวนงานที่เก็บไว้ต่อไปนี้:
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
คำถามของฉันเป็นเพียงขั้นตอนการจัดเก็บนี้ทำงานตามที่คาดไว้ (ผู้โทรทั้งหมดจะได้รับผลลัพธ์ที่ไม่ซ้ำ)