PDA

View Full Version : اینسرت وآپدیت بایک دکمه



bahrambasati
سه شنبه 02 خرداد 1391, 17:59 عصر
سلام
من یه جدول ویه دکمه دارم.می خوام وقتی اطلاعاتو وارد میکنم اگه اون داده از قبل وجود داشت به جای اینسرت
آپدیت بشه.فقط با یه دکمه باشه.(البته بدلایلی نمی خوام با پرایمری کی کردن به نتیجه برسم)
لطفا راهنمایی کنید.

iman_me
سه شنبه 02 خرداد 1391, 18:23 عصر
داخل SQL شرط رو بنویسید

aghayex
سه شنبه 02 خرداد 1391, 18:26 عصر
شما دو راه دارید اگه از اس کیو ال استفاده می کنید و دستورات درج و آپدیت رو در sp می نویسید در همون جا یه شرط قرار می دید و می گید که اگه چنین رکوردی وجود داشت مثلا آپدیت کن ولی اگه وجود نداشت درج کن .
اما اگه دستورات رو در محیط برنامه نویسی به اس کیو ارسال می کنید اول یه سلکت به اس کیو ال ارسال می کنید بعد مقدار برگشتی رو چک می کنید اگه رکوردی رو برگردونده بود که آپدیت می کنی و اگه رکوردی برنگردوند درج می کنید که اگه من باشم از روش اول استفاده می کنم

bahrambasati
سه شنبه 02 خرداد 1391, 19:00 عصر
میشه بیشتر راهنمایی کنید

شما دو راه دارید اگه از اس کیو ال استفاده می کنید و دستورات درج و آپدیت رو در sp می نویسید در همون جا یه شرط قرار می دید و می گید که اگه چنین رکوردی وجود داشت مثلا آپدیت کن ولی اگه وجود نداشت درج کن .
اما اگه دستورات رو در محیط برنامه نویسی به اس کیو ارسال می کنید اول یه سلکت به اس کیو ال ارسال می کنید بعد مقدار برگشتی رو چک می کنید اگه رکوردی رو برگردونده بود که آپدیت می کنی و اگه رکوردی برنگردوند درج می کنید که اگه من باشم از روش اول استفاده می کنم

bahrambasati
سه شنبه 02 خرداد 1391, 20:39 عصر
لطفا راهنمایی کنید
داخل SQL شرط رو بنویسید

iman_me
سه شنبه 02 خرداد 1391, 21:05 عصر
بنویسید


IF (SELECT COUNT(PK_ID) FROM TB_NAME WHERE PK_ID=1)=0
INSERT INTO ...
ELSE
UPDATE ...

Mahmoud.Afrad
سه شنبه 02 خرداد 1391, 21:07 عصر
یک راه همونه که دوستان گفتند ولی باید سرچ انجام بشه که ممکن طول بکشه.
راه بهینه تر:
شما دستور آپریت رو اجرا کنید و بعد
@@ROWCOUNT رو چک کنید. اگر صفر بود اینزرت کنید. این متغیر تعداد سطرهایی که تحت تاثیر قرار میگیرند رو نشون میده. اگر صفر بود یعنی آپدیت صورت نگرفته پس اینزرت باید انجام بشه.
مثال:
update tbl set [column for update]='مقدار مورد نظر' where [column for condition]='مقداری که شرط بر اساس اون هست' ;
if ( @@rowcount = 0 ) insert into tbl(columns_name) values(_values);

bahrambasati
سه شنبه 02 خرداد 1391, 23:28 عصر
این راهی که شما گفتید جواب داد فقط یه مشکل دارم .اینکه من از ای جدول برای ثبت فاکتور استفاده میکنم.یعنی اینکه یه فیلد توای جدول گذاشتم به نام فاکتور آیدی حالا وقتی دکمه بعدی رو می زنم می ره فاکتور بعدی .ولی وقتی یه داده مثل داده تو فاکتور قبلی تو فاکتور جدید وارد میکنم تواین فاکتور جدید هیچی وارد نمیشه.بجاش تو فاکتور قبلی آپدیت میشه.لطفا راهنمایی کنید

یک راه همونه که دوستان گفتند ولی باید سرچ انجام بشه که ممکن طول بکشه.
راه بهینه تر:
شما دستور آپریت رو اجرا کنید و بعد
@@ROWCOUNT رو چک کنید. اگر صفر بود اینزرت کنید. این متغیر تعداد سطرهایی که تحت تاثیر قرار میگیرند رو نشون میده. اگر صفر بود یعنی آپدیت صورت نگرفته پس اینزرت باید انجام بشه.
مثال:
update tbl set [column for update]='مقدار مورد نظر' where [column for condition]='مقداری که شرط بر اساس اون هست' ;
if ( @@rowcount = 0 ) insert into tbl(columns_name) values(_values);