sql server - How to execute part of the code only once while running multiple instances in T-SQL -


i have stored procedure called business code. code uses parallelism, multiple instances of sp running @ same time depending on conditions.

there logic in sp want execute once. have table (let's call history) holds uid run , datetime when portion of code executed. here's flow:

sp begin   -- logic   if conditions met, check if history not have entry uid     1. add entry in history current uid     2. run once code sp end 

the issue that, @ times, logic above still gets executed multiple times if different instances reach part @ same time. can ensure runs once?

thank you!

begin transaction;     insert [history](uid, ...)     select @uid, ...     not exists (         select * [history] (holdlock) uid = @uid     );      if @@rowcount = 1 begin;       -- inserted, logic should run once     end; commit; 

holdlock (equivalent running transaction under serializable, more granular) ensures no other transaction running in parallel can insert entry in history uid; transaction tries block until first insert finished , return (since row exists). ensure index on uid exists, otherwise lock lot more healthy performance.

getting code right tricky, make sure test in practice stress-testing concurrent inserts same (and different) uid.


Popular posts from this blog

php - How should I create my API for mobile applications (Needs Authentication) -

5 Reasons to Blog Anonymously (and 5 Reasons Not To)

Google AdWords and AdSense - A Dynamic Small Business Marketing Duo