50٪ تخفیف روی تمام دوره‌ها!
پایان تخفیف تا:
مشاهده دوره‌ها
1

کپی نشدن اطلاعات یک سلول کلید اصلی در یک سلول کلید حارجی

با سلام خدمت همه بزرگواران و اساتید

من دو تا جدول ساختم به نام 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 توسط

11 پاسخ

2

واقعیت بنده یک مقدار هنوز برام مبهمه، اما بر اساس چیزهایی که متوجه شدم شما نیاز به یک 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/01 توسط
1

فعلا که ازش گذشتم

کاری که کردم توی سی شارپ تو پنجره ای که تیبل اول قرار داره در دکمه تایید ش یه پنجره دیگه قرار دادم و بعد در دکمه تایید اون پنجره یه کد نوشتم که مقدار ستون رو بخونه و ببره تو اون جدول دیگه قرار بده

اینجوری مشکلم حل شد

من باید یه بار اساسی sql server رو بخونم فایده نداره این تکنیک های گذری

باید عمیقتر واردش بشم

پاسخ در 1395/10/25 توسط
0

دیگه حالا اگه بشه خود ستون کلید خارجی خودکار مقدار داخل ستون پرایمری کی جدول اول رو بگیره که کارم خیلی راحته

اگرنه که اگر باز یه روشی باشه که این view ساخته شده با آپدیت شدن جدول add_ta آپدیت بشه هم خوبه

ولی نمیدونم چرا اون view تا توی جدول details ستون خارجی ش مقدار پرایمری کی جدول add_ta رو نگیره ، آپدیت نمیشه و چیزی رو نشون نمیده تو خودش

پاسخ در 1395/10/01 توسط
2

ستون Primary Key به این دلیل خودکار مقدار میگیره که Identity هست، ولی ستون Foreign Key باید به صورت دستی پر بشه، به این خاطر که Identity نیست، اگر منظورتون این هست که همزمان با ایجاد یک مشتری، تو جدول Details یک رکورد اضافه بشه، اول مشخص کنید جدول Details غیر از Foreign Key چه ستون هایی داره، و مقدار پیش فرضی که غیر از Foreign Key باید داخل جدول درج بشه چه مقادیری هست.

پاسخ در 1395/10/01 توسط
1

شما برای این کار می تونید از Stored procedure استفاده کنید به این صورت که Procedure شما بره کد اون مقداری که در جدول اول درج شده بخونه و همون رو بریزه رو ستونی که می خواهید از جدول دوم. به همین راحتی دوست عزیز .

موفق باشی

پاسخ در 1395/10/25 توسط
0

ممنون بابت پاسخ

مقدار ستون 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 توسط
1

این قسمت با insert یک رکورد جدید در جدول add__ta یک رکورد در جدول add__details اضافه میشه.

پاسخ در 1395/10/02 توسط
1

البته Trigger بهتره چون Trigger ها Event-Base هستند. یعنی اگر رخدادی روی جدول اتفاق بیفته اجرا میشن در حالی که Stored procedure رو باید هربار با عبارت Execute فراخوانی کنید.

پاسخ در 1395/10/25 توسط
0

بله ممنونن بسیار عالی همین تریگر منظورم بود

فکر میکنم راه دیگه ای به جز تریگر نداره

فقط این کد رو که نوشتید یه توضیحی در موردش میدید

این قسمت رو یعنی:

([details_userId],[field1],[field2]) values (@userId,1,N'Test')

پاسخ در 1395/10/02 توسط
1

سلام، واقعیت یک مقدار موضوعی که مطرح کردید برای بنده گنگ هست. شما داخل ستون Foreign Key باید یک مقداری درج کنید که این مقدار باید در جدول اصلی شما باشه. حالا منظور از درج خودکار دقیقاً چی هست؟ فرض کنید که شما قصد دارید برای یک مشتری تعدادی سفارش ثبت کنید. جدول سفارش به جدول مشتری ارتباط داره. حالا ستون CustomerId که برای مثال کلید خارجی هست باید با یک مقداری پر بشه که شما باید مشخص کنید، یعنی کدوم مشتری قراره براش سفارش ثبت بشه. الان باید مشخص کنید که این مقدار پیش فرض دقیقاً از کجا میخواد بیاد!

پاسخ در 1395/10/01 توسط
0

اره دقیقا منظورم همینه که همزمان توی جدول details یک مقدار اضافه بشه

اصلش رو بذارید براتون توضیح بدم

توی سی شارپ من یه برنامه دارم برای مدیریت پایان نامه ها

یک پنجره داره به نام مشاهده وضعیت دانشجوها

که داخل اون یک دیتا گرید هست که بایند شده به view به نام add_details

داخل اون پنجره یک پنجره دیگه با کلید روی دکمه ای باز میشه به نام ایجاد پرونده جدید

که اینجا یک دیتا گریدی هست که بایند شده به جدولی به نام addta که در اونجا اسم و فامیلی و عکس و تلفن و کد دانشجویی و تاریخ ثبت نام ش ثبت میشه و ارسال میشه به جدول addta

غیر از این ، یه جدول دیگه هم هست به نام details که جزئیات مثلا استاد راهنما و موضوع پایان نامه و تاریخ دفاع و ... اینها داخلش هست

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

و یک کلید خارجی که متصلش کردم به جدول add_ta که هر دانشجویی که اونجا وارد میشه بعدا بتونم با رابطه ای که با جدول details داره مشخصات پایان نامه ش رو وارد کنم

از هر دوی این جدول ها یک view ساختم که اسمش add-details هستش

الان من میخوام که هر باری که تو جدول اضافه کردن دانشجو یک دانشجو اضافه میکنم ، اون مقدار کلید اصلی جدول اضافه کردن دانشجو مستقیما ارسال بشه به جدول details که بعدا بتونم جزئیات پایان نامه ش رو ویرایش کنم و توی اون view نشون بدم

مشکلم اینه که با اینکه view ساخته شده و از هر دو تا جدول داره اطلاعاتش رو میخونه ، تا ستون کلید خارجی دقیقا همون مقدار داخل ستون اصلی جدول add_ta رو نگیره ، چیزی رو نشون نمیده

و باید هر بار به صورت دستی بیام همون مقدار یک یا دو یا سه رو اضافه کنم تا مشخصات توی view نشون داده بشه

پاسخ در 1395/10/01 توسط

پاسخ شما