
نوشته شده توسط
negar.rafie
فقط برای ابدایت به صورت یکجا چکار کنم؟
ایا دستوری داریم که بشه همه ی رکوردها را به صورت یکجا ابدایت کرد؟یا نه باید یکی یکی ابدایت کنیم؟
سناریوی شما برای آپدیت کردن باید مشخص باشه.
1. برای همه رکوردهای جدول یا بعضی از رکوردهای جدول ،میخواید ستون (هایی) رو به یک مقدار مشخص تغییر بدید : در چنین مواردی همون یک دستور Update ای که می نویسید کفایت میکنه و سرعتش مناسب است (حدود 200 هزار رکورد رو حدودا 1 ثانیه ویرایش میکنه).
2. هدفتون اینه که برای هر رکورد، یکسری از مقادیر رو تغییر بدید. یعنی بعضی از رکوردهاتون دست نخورده قراره باقی بمونن و بعضی های دیگه به مقادیر مختلف قراره تغییر پیدا کنند. توی چنین جاهایی یه راه حل خوب استفاده از جدول مجازی هستش. به این شکل که رکوردهای جدید رو درون یک جدول موقت (temp) می ریزن و بعد با جدول اصلی JOIN می کنن (روی فیلد مشترک که معمولا کلید جدول هست). در واقع دستور UPdate شما، از JOIN درونش استفاده می کنید تا رکوردهای مشترک بین دو جدول اصلی و موقت شناسایی و بروزرسانی شود و سایر رکوردها دست نخورده باقی بمونن.
اگر نام جدول موقتتون TblTemp باشه با 3 فیلد StdName،StdID و StdFamily که شامل رکوردهایی هست که قراره ویرایش بشن و جدول اصلی شما هم جدول TblStudent باشه (با هر تعداد فیلدی). کد شما به اینصورت میشه :
Update TblStudent Set StudentName = StdName, StudentFamily = StdFamily From TblStudent INNER JOIN TblTemp ON TblStudent.StudentID = TblTemp.StdID
بعد از انجام عملیات آپدیت ، با دستور drop این جدول موقت رو حذف کنید تا منابعی رو که از سیستم گرفته، پس بگیرید.