درخواست های ارتباط
جستجو تنظیمات
لیست دوستان من

به انجمن های پاسخ گویی توسینسو خوش آمدید

اینجا می تونی هر سوالی بپرسی و کارشناس های مربوطه تو اولین فرصت کمکت می کنن

کپی نشدن اطلاعات یک سلول کلید اصلی در یک سلول کلید حارجی
نویسنده متن پست
1395/10/01 01:07:05 پاسخ به این پست
author
M.W.W1987
مجتبی
با سلام خدمت همه بزرگواران و اساتید

من دو تا جدول ساختم به نام add-ta و details
که تو هردوی اونها یه ستون رو به عنوان primary key تعریف کردم
یعنی توی جدول add__ta اومدم ستون add-ta__ID رو به عنوان primary key معرفی کردم
و تو جدول details اومدم ستون details_ID رو به عنوان primary key معرفی کردم
در جدول details اومدم یه ستونی به نام details__userID رو به عنوان کلید خارجی معرفی کردم و متصلش کردم به primary key در جدول add_ta
الان بینشون ریلیشن شیپ برقرار شده
من میخوام همین فیلدی رو که به عنوان forigner key معرفی کردم
به صورت خودکار با پر شدن primary key تو ستون اصلی پر بشه
یعنی هرباری که اطلاعاتی رو توی جدول add_ta وارد میکنیم ستون primary key به صورت خودکار عددی داخلش وارد میشه
میخوام همین عددی که خودکار وارد میشه ، توی ستون details__userID در جدول details وارد بشه
من فکر میکردم که چون بینشون ریلیشن شیپ برقراره باید خودکار خودش پر بشه اما نمیشه!!فقط تنها مزیتی که کلید خارجی اینجا داشته این هست که دقیقا باید مقداری که توی primary key اون جدول هست در اینجا هم وارد بشه
که خب میدونید بعدش توسط یک view من اطلاعات دیگه ای رو به صورت خودکار توی این جدول وارد میکنم و اوکیه
فقط باید حتما اون فیلد کلید خارجی خودکار پر بشه تا بقیه اطلاعات خود به خود پر بشه
خودم فکر میکنم مربوط به Default value Or Binding باشه
ولی تغییرش که دادم تغییری نکرد
در مورد Binding هم نمیدونم سینتکس دستوری ش چجوریه
سرچ زدم فکر میکنم با Trigger مشکلم حل بشه ولی سینتکسش رو بلد نیستم
راه حلی برای مشکل من اگر هست ممنون میشم راهنمایی م کنید


1395/10/01 03:33:44 پاسخ به این پست
author
حسین احمدی
حسین احمدی
سلام، واقعیت یک مقدار موضوعی که مطرح کردید برای بنده گنگ هست. شما داخل ستون Foreign Key باید یک مقداری درج کنید که این مقدار باید در جدول اصلی شما باشه. حالا منظور از درج خودکار دقیقاً چی هست؟ فرض کنید که شما قصد دارید برای یک مشتری تعدادی سفارش ثبت کنید. جدول سفارش به جدول مشتری ارتباط داره. حالا ستون CustomerId که برای مثال کلید خارجی هست باید با یک مقداری پر بشه که شما باید مشخص کنید، یعنی کدوم مشتری قراره براش سفارش ثبت بشه. الان باید مشخص کنید که این مقدار پیش فرض دقیقاً از کجا میخواد بیاد!
1395/10/01 04:13:26 پاسخ به این پست
author
M.W.W1987
مجتبی
ممنون بابت پاسخ
مقدار ستون foreign key باید به صورت خودکار همون مقدار primary key اون جدول اول باشه
یعنی من توی جدول اول یعنی جدول add__ta یک مشتری جدید ایجاد میکنم خب ستون primary key به صورت خودکار از شماره یک یکی یکی اضافه میشه و من فقط ستون های دیگه رو پر میکنم
مثلا ستون اول رو که پر کردم خود به خود ستون primary key عدد یک رو میگیره
ستون دوم خود به خود عدد دو و همینطور ادامه
حال من میخوام همین یک یا دو یا هر عددی که داخل ستون primary key وارد میشه ، توی جدول details هم توی ستون foregn key اضافه بشه
یعنی وقتی من تو جدول add_ta یک مشتری اضافه میکنم
تو جدول details توی ستون details__userID مقدار یک یا دو از داخل ستون primary key از جدول add__ta اضافه بشه

امیداورم واضح گفته باشم
1395/10/01 04:18:41 پاسخ به این پست
author
حسین احمدی
حسین احمدی
ستون Primary Key به این دلیل خودکار مقدار میگیره که Identity هست، ولی ستون Foreign Key باید به صورت دستی پر بشه، به این خاطر که Identity نیست، اگر منظورتون این هست که همزمان با ایجاد یک مشتری، تو جدول Details یک رکورد اضافه بشه، اول مشخص کنید جدول Details غیر از Foreign Key چه ستون هایی داره، و مقدار پیش فرضی که غیر از Foreign Key باید داخل جدول درج بشه چه مقادیری هست.
1395/10/01 04:29:43 پاسخ به این پست
author
M.W.W1987
مجتبی
اره دقیقا منظورم همینه که همزمان توی جدول details یک مقدار اضافه بشه
اصلش رو بذارید براتون توضیح بدم
توی سی شارپ من یه برنامه دارم برای مدیریت پایان نامه ها
یک پنجره داره به نام مشاهده وضعیت دانشجوها
که داخل اون یک دیتا گرید هست که بایند شده به view به نام add_details
داخل اون پنجره یک پنجره دیگه با کلید روی دکمه ای باز میشه به نام ایجاد پرونده جدید
که اینجا یک دیتا گریدی هست که بایند شده به جدولی به نام addta که در اونجا اسم و فامیلی و عکس و تلفن و کد دانشجویی و تاریخ ثبت نام ش ثبت میشه و ارسال میشه به جدول addta
غیر از این ، یه جدول دیگه هم هست به نام details که جزئیات مثلا استاد راهنما و موضوع پایان نامه و تاریخ دفاع و ... اینها داخلش هست
من برای جدول details یه پرایمری کی ساختم که خودش خود به خود اضافه میشه
و یک کلید خارجی که متصلش کردم به جدول add_ta که هر دانشجویی که اونجا وارد میشه بعدا بتونم با رابطه ای که با جدول details داره مشخصات پایان نامه ش رو وارد کنم
از هر دوی این جدول ها یک view ساختم که اسمش add-details هستش
الان من میخوام که هر باری که تو جدول اضافه کردن دانشجو یک دانشجو اضافه میکنم ، اون مقدار کلید اصلی جدول اضافه کردن دانشجو مستقیما ارسال بشه به جدول details که بعدا بتونم جزئیات پایان نامه ش رو ویرایش کنم و توی اون view نشون بدم
مشکلم اینه که با اینکه view ساخته شده و از هر دو تا جدول داره اطلاعاتش رو میخونه ، تا ستون کلید خارجی دقیقا همون مقدار داخل ستون اصلی جدول add_ta رو نگیره ، چیزی رو نشون نمیده
و باید هر بار به صورت دستی بیام همون مقدار یک یا دو یا سه رو اضافه کنم تا مشخصات توی view نشون داده بشه
1395/10/01 04:32:53 پاسخ به این پست
author
M.W.W1987
مجتبی
دیگه حالا اگه بشه خود ستون کلید خارجی خودکار مقدار داخل ستون پرایمری کی جدول اول رو بگیره که کارم خیلی راحته
اگرنه که اگر باز یه روشی باشه که این view ساخته شده با آپدیت شدن جدول add_ta آپدیت بشه هم خوبه
ولی نمیدونم چرا اون view تا توی جدول details ستون خارجی ش مقدار پرایمری کی جدول add_ta رو نگیره ، آپدیت نمیشه و چیزی رو نشون نمیده تو خودش
1395/10/01 08:24:00 پاسخ به این پست
author
حسین احمدی
حسین احمدی
واقعیت بنده یک مقدار هنوز برام مبهمه، اما بر اساس چیزهایی که متوجه شدم شما نیاز به یک trigger دارید که با درج رکورد در جدول a یه سطر به صورت خودکار در جدول b اضافه بشه که به نظرم trigger زیر کار شما رو انجام میده:

create trigger [dbo].[InsertDetails]
	on [dbo].[add_ta]
	for insert
as
        declare @userId int = (select [Id] from inserted)
        insert into add_details ([details_userId],[field1],[field2]) values (@userId,1,N'Test')
1395/10/02 10:51:03 پاسخ به این پست
author
M.W.W1987
مجتبی
بله ممنونن بسیار عالی همین تریگر منظورم بود
فکر میکنم راه دیگه ای به جز تریگر نداره
فقط این کد رو که نوشتید یه توضیحی در موردش میدید
این قسمت رو یعنی:
([details_userId],[field1],[field2]) values (@userId,1,N'Test')
1395/10/02 11:37:10 پاسخ به این پست
author
حسین احمدی
حسین احمدی
این قسمت با insert یک رکورد جدید در جدول add__ta یک رکورد در جدول add__details اضافه میشه.
1395/10/25 02:29:01 پاسخ به این پست
author
پانته آ
پانته آ
شما برای این کار می تونید از Stored procedure استفاده کنید به این صورت که Procedure شما بره کد اون مقداری که در جدول اول درج شده بخونه و همون رو بریزه رو ستونی که می خواهید از جدول دوم. به همین راحتی دوست عزیز .
موفق باشی
1395/10/25 02:30:51 پاسخ به این پست
author
پانته آ
پانته آ
البته Trigger بهتره چون Trigger ها Event-Base هستند. یعنی اگر رخدادی روی جدول اتفاق بیفته اجرا میشن در حالی که Stored procedure رو باید هربار با عبارت Execute فراخوانی کنید.

1395/10/25 05:22:16 پاسخ به این پست
author
M.W.W1987
مجتبی
فعلا که ازش گذشتم
کاری که کردم توی سی شارپ تو پنجره ای که تیبل اول قرار داره در دکمه تایید ش یه پنجره دیگه قرار دادم و بعد در دکمه تایید اون پنجره یه کد نوشتم که مقدار ستون رو بخونه و ببره تو اون جدول دیگه قرار بده
اینجوری مشکلم حل شد
من باید یه بار اساسی sql server رو بخونم فایده نداره این تکنیک های گذری
باید عمیقتر واردش بشم

برای ارسال پست ابتدا به سایت وارد شوید

arrow