Merhaba Birden çok kullanıcının aynı anda bir tabloyu güncelleştirmesini önlemek istiyorum.Birden çok kullanıcının aynı SQL Server saklı yordamını aynı anda çalıştırmasını engelleyin
DB "abc"
güncelleştirmesinde "abd.dbo.xyz"
tablosunda bu tablo gereklidir. SQL için yeniyim, ancak henüz gereksinimlerimi karşılamayan bir kod yazdım.
Herhangi bir yardım? 1 prosedürü kilidi serbest bırakılması için beklemek zorunda anlamına gelirken sonuç, (0,1) ise
use [abc]
BEGIN TRANSACTION
DECLARE @res INT
EXEC @res = sp_getapplock
@Resource = 'This a Lock ID',
@LockMode = 'Exclusive',
@LockOwner = 'Transaction',
@LockTimeout = 15000,
IF @res NOT IN (0, 1)
BEGIN
RAISERROR ('Unable to acquire Lock', 16, 1)
END
ELSE
BEGIN
-- this is update command which i need to run one instance only
Update abc.dbo.xyz set IsKeyProduct= NULL Where IsKeyProduct is not NULL;
EXEC @res = sp_releaseapplock
@Resource = 'This a Lock ID',
@DbPrincipal = 'public',
@LockOwner = 'Transaction'
END
COMMIT
Sen gerekenden daha fazla iş yapıyor olabilir bırakmadan ile rahatsız gerekir, böylece sürece işlem çalıştığı gibi kilit tutmak için söyler. Tablo ipuçlarını gözden geçirin ve istediğinizi yapıp yapmadıklarını görün: https://technet.microsoft.com/en-us/library/ms187373(v=sql.105).aspx. –
Bunun nedeni nedir? DBMS bunu ele alıyor. – Dane
Güncelleme komutu yerine bitirmek için yaklaşık 60 dakika süren saklı bir procum var. Aynı zamanda başka bir kullanıcı aynı işi çalıştırırsa, tamamlanması (90 dakika) çok zaman alır. Bu yüzden bu sorunu önlemek istiyorum. – Ramaq