mastermehdi1
پنج شنبه 29 اردیبهشت 1390, 14:33 عصر
سلام دوستان
کد زير رو نگاه کنيد:
create procedure [proc]
as
begin
if(not exists(select * from [table] where [date] = convert(date, getdate())))
insert into [table]
([counter], [date])
values
(1, convert(date, getdate()))
else
update [table]
set [counter] += 1
where [date] = convert(date, getdate())
end
در حالت عادی اين کد درست عمل می کنه!
یعنی اگر در جدول فیلدی با تاریخ امروز وجود نداشته باشه پس یه فیلد با تاریخ امروز بهش اضافه میشه و شمارندش یک میشه در غیر اینصورت به شمارنده ی فیلدی که تاریخ امروز رو داره یک شماره اضافه میشه!
اما وقتی بطور همزمان صدها مرتبه اين تابع صدا زده بشه بلاخره چند تا درخواست با هم شرطشون صحیح شده و وارد مرحله insert میشن که این باعث میشه اولین درخواست یه سطر به جدول اضافه کنه و درخواست های بعدی تولید خطا کنن!
به نظر شما چطور میشه این مسئله رو حل کرد؟
کد زير رو نگاه کنيد:
create procedure [proc]
as
begin
if(not exists(select * from [table] where [date] = convert(date, getdate())))
insert into [table]
([counter], [date])
values
(1, convert(date, getdate()))
else
update [table]
set [counter] += 1
where [date] = convert(date, getdate())
end
در حالت عادی اين کد درست عمل می کنه!
یعنی اگر در جدول فیلدی با تاریخ امروز وجود نداشته باشه پس یه فیلد با تاریخ امروز بهش اضافه میشه و شمارندش یک میشه در غیر اینصورت به شمارنده ی فیلدی که تاریخ امروز رو داره یک شماره اضافه میشه!
اما وقتی بطور همزمان صدها مرتبه اين تابع صدا زده بشه بلاخره چند تا درخواست با هم شرطشون صحیح شده و وارد مرحله insert میشن که این باعث میشه اولین درخواست یه سطر به جدول اضافه کنه و درخواست های بعدی تولید خطا کنن!
به نظر شما چطور میشه این مسئله رو حل کرد؟