PDA

View Full Version : حذف همزمان از چند جدول!!!!



navidkhalilian
سه شنبه 15 شهریور 1390, 22:41 عصر
سلام دوستان.من داخل دیتابیس چند تا جدول دارم که همه با یک کلید با هم ارتباط دارند.حالا می خوام با یک دستور همه سطر هایی از این چند جدول رو که کلید انها برابر 1 هست رو حذف کنم.میشه راهنمایی کنید.ممنون

oliya24
سه شنبه 15 شهریور 1390, 23:01 عصر
سلام اگر میشه یه تصویر از ساختار جداولی که با هم ارتباط دارند رو ضمیمه کن

navidkhalilian
سه شنبه 15 شهریور 1390, 23:53 عصر
بفرمایید دوست عزیز.این هم تصویر ضمیمه.

oliya24
چهارشنبه 16 شهریور 1390, 00:12 صبح
شما باید ابتدا ارتباط رو حذف کنید و بعد با نوشتن یک query ساده اون سطرهایی روکه میخواهید پاک کنید چون جداول به هم ارتباط دارن اس کیو ال اجازه حذف رو نمیده
شما میتونید به صورت ویزارد هم ارتباط میان جداول را بردارید
در مورد کوئری اگر مشکلی داشتید بفرمایید تا جواب رو خدمتتون عرض نمایم
موفق باشید دوست گرامی

navidkhalilian
چهارشنبه 16 شهریور 1390, 00:17 صبح
شما باید ابتدا ارتباط رو حذف کنید و بعد با نوشتن یک query ساده اون سطرهایی روکه میخواهید پاک کنید چون جداول به هم ارتباط دارن اس کیو ال اجازه حذف رو نمیده
شما میتونید به صورت ویزارد هم ارتباط میان جداول را بردارید
در مورد کوئری اگر مشکلی داشتید بفرمایید تا جواب رو خدمتتون عرض نمایم
موفق باشید دوست گرامی

دوست عزیز من تو کوئری گیرم.منتظر پاسختون هستم.ممنون

Elham_gh
چهارشنبه 16 شهریور 1390, 08:43 صبح
سلام دوستان.من داخل دیتابیس چند تا جدول دارم که همه با یک کلید با هم ارتباط دارند.حالا می خوام با یک دستور همه سطر هایی از این چند جدول رو که کلید انها برابر 1 هست رو حذف کنم.میشه راهنمایی کنید.ممنون

دوست عزیز
اگه اون جداول با هم ارتباط دارند، برای ارتباطت تعریف کن که Delete cascade داشته باشه، اونوقت اگر از جدول master پاک کنید از تمام جداول تابعه نیز رکورد متناظر پاک می شود. در غیر اینضورت باید یک Transaction بنویسی و کلیه دستورات Delete را داخل آن قرار بدی. Transaction با کلیه دستورات داخلش، یک دستور حساب می شه، یا کلش اجرا می شه یا نمی شه.


Begin Transaction
DELETE FROM tb1 WHERE codea=1
DELETE FROM tb2 WHERE codeb=1
DELETE FROM tb3 WHERE codec=1
Commit Transaction

navidkhalilian
چهارشنبه 16 شهریور 1390, 16:46 عصر
دوست عزیز
اگه اون جداول با هم ارتباط دارند، برای ارتباطت تعریف کن که Delete cascade داشته باشه، اونوقت اگر از جدول master پاک کنید از تمام جداول تابعه نیز رکورد متناظر پاک می شود. در غیر اینضورت باید یک Transaction بنویسی و کلیه دستورات Delete را داخل آن قرار بدی. Transaction با کلیه دستورات داخلش، یک دستور حساب می شه، یا کلش اجرا می شه یا نمی شه.


Begin Transaction
DELETE FROM tb1 WHERE codea=1
DELETE FROM tb2 WHERE codeb=1
DELETE FROM tb3 WHERE codec=1
Commit Transaction


سلام دوست عزیز.ممنون از راهنمایی اما این روشی که گفتید رو بلد بودم.ما 400 تا جدول داریم من می خوام 400 خط کد ننویسم.الان هم از همین روش داریم استفاده می کنیم.اسم جداول رو ریختیم داخل یک لیست و با حلقه For این کوئری رو میسازیم.من دنبال راه بهتر و اصولی تر میگردم.ممنون

Galawij
چهارشنبه 16 شهریور 1390, 17:04 عصر
سلام دوست عزیز،
بله روش بهتری هم داریم، در حقیقت این دستورات FOR را به خود SQL واگذار می کنیم. من یک مثال براتون می ذارم:

EXECsp_MSForEachTable'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
EXECsp_MSForEachTable'DELETE FROM ? Where NOT EXISTS (Select TablesName From TbControlTables Where Object_Id(''?'')=Object_Id(TablesName))'
EXECsp_MSForEachTable'ALTER TABLE ? CHECK CONSTRAINT ALL'

روشی که من استفاده کردم، به این صورت هست که یک جدول درست کردم و لیست جداولی را که نمی خواهم حذف شوند داخل این جدول ریختم و در شرط مورد نظر با NOT EXISTS چک می کنم که این جداول نباید پاک شوند. می تونید با هر شرطی روی این دستور مانور بدید.
برای کسب اطلاعات بیشتر به این لینک (http://barnamenevis.org/showthread.php?296751-خالی-کردن-جداول-Database) مراجعه بفرمائید.

sepehr.net
شنبه 02 مهر 1390, 21:52 عصر
سلام
دوست عزیز یک روش این هست که هنگامی که کلید خارجی رو ایجاد میکنی ، یک پروپرتی داره که مشخص میکنه با update و delete شدن سطر اصلی ، سطر های مربوطه در جداول فرعی نیز پاک یا آپدیت شوند یا نه!
به نظر من با ست کردن اون مشکل شما حل خواهد شد.
(البته این سبک طراحی استاندارد نمیباشد ، به نظر من سبک طراحی جداول رو اصلاح کنید.)