PDA

View Full Version : استفاده همزمان چند کاربر از StoredProcedure



meisam1366
پنج شنبه 05 خرداد 1390, 14:23 عصر
سلام دوستان!
یک سوال در مورد استفاده همزمان چند کاربر از StoredProcedure دارم.

کد زیر ر نگاه کنید:

CREATE Procedure [dbo].[sp_Accounts_UpdateStatuse]
@Count int,
@Statuse int,
@NewStatuse int
As

Begin

Declare @tip Table(ids int)

Insert into @tip
Select Top(@Count)
[ID]
From Accounts
Where
[Statuse] = @Statuse


if (Select COUNT(ids) from @tip) = @Count
Begin
Update Accounts
Set [Statuse] = @NewStatuse
Where [ID] in (select ids From @tip)

Select * From @tip
End

else
Begin
return 0
End

End

این SP میآید تعداد مشخصی از اکانتهایی رو که وضعیتشون قابل واگذلری هست رو بر میداره، بعد وضعیت این اکانتها رو در وضعیت غیر قابل واگذاری قرار داده و آی دی اکانتها رو برمیگردنه.

اگر این برنامه در یک سیستم تک کاربره اجرا بشه مشکلی به وجود نمیآد.

حال در یک سیستم چند کاربره مثل یک سایت، چطوری میشه کاری کرد که id هایی که تو جدول @tip هستند، تا زمانی که وضعیت اکانتشون به وضعیت غیر قابل دسترسی تغییر نکرده، کاربر دیگه ای نتونه به جدول اکانتها دسترسی داشته باشه و اکانتهایی که هنوز وضیتشون تغییر نکرده رو نتونه انتخاب کنه.

.......

m_omrani
پنج شنبه 05 خرداد 1390, 15:21 عصر
باید از تراکنش (Transaction) استفاده کنی.

begin try
begin tran

-- your script

commit tran
end try
begin catch
...
rollback tran
end catch

meisam1366
پنج شنبه 05 خرداد 1390, 15:35 عصر
باید از تراکنش (Transaction) استفاده کنی.



خیلی ممنون از راهنماییتون.

میشه یک مقدار بیشتر توضیح بدین:
1- آیا زمانی که ار Tran استفاده کنم، تا زمانی که تمام نشده، کاربر دیگری نمیتونه به جدول دسترسی داشته باشه؟؟
2- اگر کاربر خواست به جدول (چه از طریق این SP و یا از طریق SP دیگر) دسترسی داشته (بخونه یا بنویسه)، در صف قرار میگیره یا اینکه اتفاق دیگه ای می افته و برگشت داده میشه؟؟

.