ورود

View Full Version : بررسی PK بودن یک فیلد



ali_divsalar
دوشنبه 12 تیر 1385, 06:33 صبح
سلام
دستوری وجود داره که بشه پی به PK بودن یه فیلد برد ، تا درصورت نداشتن این خاصیت ، اون فیلد رو pK کرد؟

Kamyar.Kimiyabeigi
دوشنبه 12 تیر 1385, 07:45 صبح
select * from INFORMATION_SCHEMA.KEY_COLUMN_USAGE

ali_divsalar
شنبه 17 تیر 1385, 07:18 صبح
از راهنمایی تون ممنونم

مشکلی دیگه ای که پیش اومده اینه که یه جدول ممکنه از قبل pk دیگه ای هم داشته باشه و ما بخواهیم Pk های دیگه هم ایجاد کنیم و در نتیجه موقع ایجاد Pk جدید error رخ می ده.
به نظرم یه راهش اینه که درصورت وجود pk اونا رو برداره و مجددا اونارو به همراه pk جدید از نو ایجاد کنه. اگه روش درستیه با چه دستوری pk قبلی رو باید از بین برد، و اگه نه به چه صورت باید عمل کنم

AminSobati
شنبه 17 تیر 1385, 13:32 عصر
یک جدول تنها یک PK میتونه داشته باشه.
برای برداشتن PK قبلی شما باید نام PK Constraint رو داشته باشید (با کمک دستوری که کامیار نوشت):


ALTER TABLE MyTable
DROP CONSTRAINT MyPk_Const

ali_divsalar
شنبه 17 تیر 1385, 13:57 عصر
یک جدول تنها یک PK میتونه داشته باشه.
code]
ALTER TABLE MyTable
DROP CONSTRAINT MyPk_Const
[/code]

پس مجموعه فیلدهایی که با دستورات sql بعنوان PK تعریف می کنیم را بعنوان یک pk می شناسیم؟

Kamyar.Kimiyabeigi
شنبه 17 تیر 1385, 14:15 عصر
شما برای table اگر Pk تون شامل یک فیلد و یا چند فیلد باشه در نهایت با یک CONSTRAINT مشخص میشه

AminSobati
شنبه 17 تیر 1385, 15:49 عصر
پس مجموعه فیلدهایی که با دستورات sql بعنوان PK تعریف می کنیم را بعنوان یک pk می شناسیم؟
دقیقا!....

ali_divsalar
یک شنبه 18 تیر 1385, 06:20 صبح
خیلی ممنونم جناب آقای ثباتی

ali_divsalar
سه شنبه 07 شهریور 1385, 14:20 عصر
مورد عجیبی که بهش برخورد کردم اینه که ، موقع حذف pk برای یکی دو جدول خاص همیشه پیغامی صادر می شه که چنین pk یی وجود نداره و موقعی که بررسی می کنم می بینم اسم اون جدول خاص با یه شماره همراهه و البته با حذف دستی pk اون جدول و اجرا دستورات ساخت pk، مجددا ساختن اونها انجام می شه ولی حذف دستی که فایده ای نداره و نمی دونم چه فرقی بین اون جدول خاص با جداول دیگه وجود داره که نمی تونم pkیی که اسمش رو خودم تعیین کردم رو نمی تونم بواسطه دستور SQL حذف کنم. اینرا هم خاطر نشان شوم که درمورد این جداول خاص دقیقا مشابه سایر جداول عمل کردم.

ali_divsalar
چهارشنبه 08 شهریور 1385, 14:08 عصر
از دوستان کسی نمی خواد نظری بده؟

rezaei manesh
چهارشنبه 08 شهریور 1385, 18:19 عصر
این دستور همه کلید ها رو حذف می کنه من چند با رویه چندتا جدول امتهان کردم آگه شما اسم کلید خاصی مد نزر تون هست که می خاین فقط اون حذف بشه هم می تونین بهش کلک بزنین اول همه کلید ها رو حذف و بعد کلید هایی رو که می خواین رو اضافه کن

ali_divsalar
شنبه 11 شهریور 1385, 08:13 صبح
این دستور همه کلید ها رو حذف می کنه من چند با رویه چندتا جدول امتهان کردمکن

برنامه ام مثل برنامه بازسازی ایندکسها تو برنامه های داس عمل میکنه و به این نکته هم توجه دارم که ظاهرا تست وجود کلید براساس نام PK (که معمولا براساس اسم Table ساخته شده ) صورت می گیره و من هم مشکلم نام PK برای فقط دوسه Table خاصه . یعنی اسم PK اونی که من ساختم نیست و یه عدد انتهاش وجود داره و برای بقیه جداولم براساس مطلبی که اشاره کردید درست عمل می شه.


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

اگه بیشتر توضیح بدید ممنوم می شم

حامد رضائی
شنبه 11 شهریور 1385, 18:09 عصر
شما اول همه کلید ها رو حذف کنید بعد فیلد هایی رو که می خواین کلید باشن رو دوباره کلید کنید

ali_divsalar
دوشنبه 13 شهریور 1385, 12:46 عصر
بحث اصلی حذف کلیدهاست که تحت یه Pk می شناسیم.ومیخواهیم با دستور SQl اونها رو حذف کنیم.
واگه یه نگاهی به تاپیکهای قبل بیندازید میبینید اینکار انجام می شه و فقط یکی دو جدول خاص موقع حذف(از طریق دستور SQL) مشکل داره.