PDA

View Full Version : سوال: دستور sql یک شرط



هادی2020
دوشنبه 10 تیر 1387, 11:48 صبح
سلام لطفا توی این شرط کمکم کنید
چطور میشه یه رکورد به یه جدول اضافه کرد که اولا فیلد اول(کد) ورودی ما تکراری نباشد دوم اینکه فیلد دوم که کلید خارجی جدول دوم می باشد بررسی شود که اگر داده های ورودی ما در این فیلد در جدول دوم وجود نداشته باشد اجازه درج به این رکورد داده نشود

Dariuosh
دوشنبه 10 تیر 1387, 15:30 عصر
شما بايد
1- فيلد اول جدولتون رو PrimeryKey بکنيد
2- فيلد دوم جدولتون رو با فيلد جدول دومي که ميخواهيد چک کنه ForeignKey بکنيد

هادی2020
دوشنبه 10 تیر 1387, 15:47 عصر
یعنی میگید که اگر فقط این کار را انجام بدم و از طریق کدنویسی یه رکورد به این جدول اضافه کنم هیچ مشکلی پیش نمیاد. مرسی عزیز
حالا کسی می تونه کد این دستور را بنویسه

یک دوست
دوشنبه 10 تیر 1387, 19:21 عصر
سلام دوست عزیز
همون جوvی که دوستمون گفت برای فیلد اول بایدPrimeryKey در نظر بگیری
وبرای فیلد دوم هم باید قبل از عملیات insert یک دستور select بنویسی که شرط اون رو هم باید نام ستونت رو مساوی با مقدار فیلد دومت قرار بدی وبعد تو if باید بنویسی اگرsqlreader.read= true بود یعنی فیلدی را پیدا کرده پس در قسمت then دستور insert را بنویسی

Dariuosh
سه شنبه 11 تیر 1387, 09:28 صبح
دوم اینکه فیلد دوم که کلید خارجی جدول دوم می باشد بررسی شود که اگر داده های ورودی ما در این فیلد در جدول دوم وجود نداشته باشد اجازه درج به این رکورد داده نشود
قانون جدول پدر و فرزند همينه ديگه
شما اگه فيلد مورد نظر که ميخواهيد کدش رو در جدول فرزند وارد کنيد در جدول پدر موجود نباشد در صورت ست کردن ForeignKey خودش Error ميدهد و شمارا با خبر مينمايد .
يه مثال ميزنم
شما جدولي داريد که در آن نام استانها را در آن ذخيره ميکند به ترتيب زير


Create Table State ( Code int Not Null ,Name VarChar(50) , POPULATION int)
Go
insert into state values(1,'Tehran',14000)
insert into state values(2,'Fars',8000)
insert into state values(3,'Khorasan',5000)
insert into state values(4,'Booshehr',6000)


سپس فيلد کد را Primery ميکنيد


ALTER TABLE State ADD CONSTRAINT
PK_State PRIMARY KEY CLUSTERED (Code) ON [PRIMARY]

نکته : فيلدي که Primery ميشود نميتواند NULL باشد

حالا جدول شهرها را درست ميکنيم به اين ترتيب


Create Table City (Code int not null,Name varchar(50) Not Null, StateCode int not Null)
Go
ALTER TABLE City ADD CONSTRAINT
PK_City PRIMARY KEY CLUSTERED (Code) ON [PRIMARY]

حالا
مقدار دهي قبل از ست کردن ForeignKey


insert into city values(1,'karaj',1)
insert into city values(2,'Sari',5)

الان شما ديد که به راحتي Sari با کد استان 5 ثبت شد در صورتي که نبايد اين اتفاق مي افتاد
ولي بعد از ست کردن ForeignKey
ببنيد


ALTER TABLE dbo.City ADD CONSTRAINT
FK_City_State FOREIGN KEY (StateCode) REFERENCES dbo.State(Code)

در اين مرحله ابتدا شما با Error مواجه ميشويد
چرا ؟
چون در حال حاضر شما فيلدي در جدول فرزند داريد که کد آن در جدول پدر موجود نيست
حالا شما چند راه داريد
يا فيلد مورد نظر را در جدول پدر ايجاد کنيد ، يا فيلد فرزند را حذف کنيد يا به Sql Server بفرمائيد فعلا بي خيال شو خودم ميدونم دارم چي کار ميکنم !!!
مثلاً ما فيلد فرزند زا حذف ميکنيم


Delete from City
Where Code=2


حالا دوباره ForeignKey رو ست کنيد :لبخندساده:
اين بار اگر بخواهيد فيلدي در جدول شهرها اضافه کنيد که استان آن موجود نباشد MS SQL Server جلوي شما رو ميگيرد و به شما پیغام ميدهد

ديدي کاري نداشت