نمایش نتایج 1 تا 7 از 7

نام تاپیک: افزودن دو رکورد همزمان به دو جدول در sql

  1. #1

    Question افزودن دو رکورد همزمان به دو جدول در sql

    سلام
    برای سادگی، فرض کنید یه فروشگاه داریم. یه فروش قراره انجام بشه
    در ابتدا به جدول اول که حاوی اطلاعات اصلی فروش مثل زمان و قیمت کل هست، یک رکورد اضافه می کنیم. فیلد ای دی در جدول اصلی هر بار توسط sql یک مقدار میگیره.
    حالا می خوایم تو جدول زیر مجموعه مشخصات خرید مثل تک تک اجناس رو ذخیره کنیم.

    مشکل اینجاست که نمی دونیم ای دی جدول اصلی که توسط sql مقدار دهی شده، چنده تا اون رو هم توی جدول دوم اضافه کنیم. از روش هایی مثل گرفتن آخرین رکورد میشه استفاده کرد ولی دنبال یه روش اصولی تر هستم.
    پس سوال من اینه که چطور میشه تو دو جدول مرتبط که ای دی جدول اصلی هر بار یک عدد میگیره، رکورد اضافه کنیم.

    در ضمن این اطلاعات مستقیما در sql ذخیره می شوند!

  2. #2
    کاربر دائمی
    تاریخ عضویت
    آذر 1385
    محل زندگی
    همین نزدیکیها
    پست
    683

    نقل قول: افزودن دو رکورد همزمان به دو جدول در sql

    روش اصولی اینه که از scope_Identity() در sql استفاده کنی

    هر بار که دستور insert انجام میشه بلافاصله این دستور رو select کن یا داخل sp اون رو return کن
    بعدش کد رو داری میتونی رکورد های جدول دومت رو کد گذاری کنی

  3. #3
    کاربر دائمی آواتار M.YasPro
    تاریخ عضویت
    آبان 1386
    محل زندگی
    Kernel
    پست
    1,171

    نقل قول: افزودن دو رکورد همزمان به دو جدول در sql

    سلام
    من سوالتون رو ناقص متوجه شدم ، اما شما می تونید برای جدول a یه تریگر بنویسید که بلافاصله بعد از درج شدن در جدول a یک رکورد در جدول b درج کن .
    برای اینکه فیلدهایی از رکورد درج شده در جدول a رو در رکورد b درج کنید باید از کلمه کلیدی Inserted استفاده کنید .
    برای اطلاعات بیشتر

  4. #4

    نقل قول: افزودن دو رکورد همزمان به دو جدول در sql

    scope_Identity() یه باگ داره که گاهی اوقات مقادیر اشتباه برمیگردونه، دنبال یه راهه دیگم. یه نگاه به این لینک بندازین
    http://connect.microsoft.com/SQLServ...ncorrect-value

    trigger هم اونطور که من ازش خوندم بدرد این شرایط نمی خوره. من می‌خوام یه رکورد با اطلاعات مشخص در جدول دوم ثبت کنم، فقط مشکل اینه که می خوام ای دی جدول اصلی که هر بار یه عدد میگیره، به عنوان یک فیلد در جدول دوم ثبت بشه. از اونجایی که در لحظه افزودن رکورد به جدول اصلی این ای دی مقدار میگیره، به دنبال یه روش مطمئن برای بدست آوردن ای دی ایجاد شده هستم. و یا شاید یه روش برای افزودن همزمان!

  5. #5
    کاربر دائمی آواتار M.YasPro
    تاریخ عضویت
    آبان 1386
    محل زندگی
    Kernel
    پست
    1,171

    نقل قول: افزودن دو رکورد همزمان به دو جدول در sql

    من نظرم هنوز روش استفاده از Trigger هست اما از این کلمه کلیدی هم میتونی استفاده کنی @@identity

  6. #6
    کاربر دائمی
    تاریخ عضویت
    آذر 1385
    محل زندگی
    همین نزدیکیها
    پست
    683

    نقل قول: افزودن دو رکورد همزمان به دو جدول در sql

    نقل قول نوشته شده توسط Javad90 مشاهده تاپیک
    scope_Identity() یه باگ داره که گاهی اوقات مقادیر اشتباه برمیگردونه، دنبال یه راهه دیگم. یه نگاه به این لینک بندازین
    http://connect.microsoft.com/SQLServ...ncorrect-value

    trigger هم اونطور که من ازش خوندم بدرد این شرایط نمی خوره. من می‌خوام یه رکورد با اطلاعات مشخص در جدول دوم ثبت کنم، فقط مشکل اینه که می خوام ای دی جدول اصلی که هر بار یه عدد میگیره، به عنوان یک فیلد در جدول دوم ثبت بشه. از اونجایی که در لحظه افزودن رکورد به جدول اصلی این ای دی مقدار میگیره، به دنبال یه روش مطمئن برای بدست آوردن ای دی ایجاد شده هستم. و یا شاید یه روش برای افزودن همزمان!
    من تا حالا اشکالی توش ندیدم ولی اگه بخوای راه دیگه ای انتخاب کنی استفاده از تابع max هست
    بلافاصله پس از insert دستور max(code) رو برگردون میشه آخرین کدی که داری

    من نظرم هنوز روش استفاده از Trigger هست اما از این کلمه کلیدی هم میتونی استفاده کنی @@identity
    درباره trigger باید بگم که جاش اینجا نیست
    زمانی که شما بخواهید بر اساس اطلاعات وارد شده تاثیر روی چدول دیگه بزاره مثلا مقدار یک فیلدش رو کم کنه و اضافه کنه و یا یک رکورد توی history بندازه ازش استفاده میشه یعنی توی trigger فقط اطلاعات insert شده رو بهش دسترسی داریم
    نه موقعی که مثلا یک فاکتور میخوای ثبت کنی و عنوان فاکتور توی یک جدول ذخیره میشن و ردیف ها توی یک جدول دیگه
    وقتی اطلاعات عنوان توی جدول insert میشه جدول دوم اطلاعات دیگه ای داره که کاربر وارد کرده و توی trigger بهش دسترسی نداریم و باید با یک دستور insert دیگه اون جدول رو پر کنیم و اینجا مشکل اینه که باید کد فاکتور در جدول اصلی برابر باشه با کد فاکتور در ردیف ها

  7. #7

    Cool پاسخ افزودن دو رکورد همزمان به دو جدول در sql

    با تشکر از کمک همه
    با یکم تغییر تونستم به جوابی که مدنظرم بود برسم. واسه راهنمایی دوستانی که در آینده ممکنه به این مشکل برخورد کنند کد استفاده شده خودم رو توضیح میدم.

    در ابتدا یک متغییر عمومی در کلاس ایجاد می کنم
    public int Identity;


    سپس به همان کد قبلی دستور SELECT SCOPE_IDENTITY رو اضافه کرده و در خط بعدی کد را اجرا و مقدار بازگشتی را با یک تبدیل، در متغییر تعریف شده قرار میدم. درضمن _cmd یک متغییر از جنس SqlCommand هست!

    _cmd.CommandText = sql + "; SELECT SCOPE_IDENTITY() AS [lastInsertedId]";
    Identity = Convert.ToInt32(_cmd.ExecuteScalar());


    حالا واسه اضافه کردن به جدول دوم میشه از متغییر تعریف شده که حاوی ای دی اضافه شده هست، استفاده کرد

    موفق باشید

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •