PDA

View Full Version : اتوآپدیت



linux
چهارشنبه 25 مرداد 1385, 11:39 صبح
من یک جدول دارم که شامل 5 تا فیلد هست و یک فیلد تاریخ داره یک فیلد از نوع bit به اسم isActive اطلاعاتی که تو این جدول نگهداری میشه جهت پردازش استفاده میشه و همواره آخرین رکورد که وارد شده باید استفاده بشه چطور می توان یک کاری کنم که وقتی کار بر یک رکورد جدید وارد کرد isActive همه رکوردهای قبلی 0 بشه و این رکورد جدید 1

حمیدرضاصادقیان
چهارشنبه 25 مرداد 1385, 12:33 عصر
خوب یک راه میتونه این باشه که برای insert یک sp بنویسی و در پایان sp مشخص کنی که همه رکوردها 0 شود. یکی هم فکر کنم از triger باشه ولی در این مورد زیاد مطمئن نیستم. در مورد روش اول مطمئن هستم.

majid_afra222
چهارشنبه 25 مرداد 1385, 15:45 عصر
سلام
فقط تریگر، در تریگر INSERT مقدار isActive تمام رکوردها رو غیر از رکورد فعلی 0 کن، و مقدار پیش فرض رو برای isActive برابر 1 بذار.
در تریگر UPDATE هم چک کن که کسی نتونه مقدار isActive رو برای 2 تا فیلد 1 بکنه.

linux
چهارشنبه 25 مرداد 1385, 18:07 عصر
میشه اگر ممکن این کدش را بگوید چطوری باید بنویسم

hpx
پنج شنبه 26 مرداد 1385, 00:28 صبح
هم با trigger میشه هم تو sp
sp سرعتش بیشتره

declare @ErrorCode int
declare @id int

begin transaction
insert into table1 values(...)

set @ErrorCode = @@ERROR

if (@ErrorCode <> 0) GOTO PROBLEM
()set @id = SCOPE_IDENTITY



update table1 set isactive =0 where id<>@id

set @ErrorCode = @@ERROR
if (@ErrorCode <> 0) GOTO PROBLEM
commit transaction

PROBLEM:
if (@ErrorCode <> 0) begin
print 'Unexpected error occurred!'
rollback transaction
end