PDA

View Full Version : سوال: مشکل در حذف constraint در زمان حذف فیلد



mpmsoft
چهارشنبه 02 بهمن 1387, 20:31 عصر
دوستان من فیلدی دارم به نام عنوان . و برای این فیلد یک مقدار default معرفی کردم

زمانی که می خوام این فیلد رو توسط کد زیر حذف کنم با خطای زیر مواجه می شم

طی جستجویی که من در گوگل کردم متوجه شدم که ابتدا باید constraint این فیلد رو خذف کنم تا بتونم فیلد رو حذف کنم که من این کارو کردم و جواب داد

اما مشکل اینجاست که اسم constraint فیلد نمی دونم چه شکلی هست چون متغیر و به شکل زیر نوشته می شه

حالا چطوری می تونم اسم constraint یک فیلد رو بدست بیارم که اول اونو حذف کنم و بعد فیلدو


ALTER Table table_1 DROP column عنوان

خطا :



Msg 5074, Level 16, State 1, Line 1
The object 'DF_Table_1_عنوان' is dependent on column 'عنوان'.
Msg 4922, Level 16, State 9, Line 1
ALTER TABLE DROP COLUMN عنوان failed because one or more objects access this column.

mannai29
پنج شنبه 03 بهمن 1387, 09:24 صبح
حالا چطوری می تونم اسم constraint یک فیلد رو بدست بیارم که اول اونو حذف کنم و...
سلام
فکر نکنم دستوری برای اینکه اسم constraint یک فیلد رو بشه بدست آورد باشه.یک دستور هم برای حذف Default از یک Column هست به نام sp_unbindefault که درست اجرا نمی شه!!
اما با جوین کردن جدولهای Sysobjects و syscolumns و sysconstraints میشه اون رو پیدا کرد.

mpmsoft
پنج شنبه 03 بهمن 1387, 09:33 صبح
لطف می کنید یک مثال بزنید

mannai29
پنج شنبه 03 بهمن 1387, 10:59 صبح
اگرچه یاد دادن ماهیگیری بهتر از خود ماهیگیری است !!!! ولی


select
t3.name as ColName,
t2.name as DefName
from Sysobjects t1
join Sysobjects t2 on t1.id=t2.parent_obj
join syscolumns t3 on t2.id=t3.cdefault
where t1.name='TBLNAME' and t3.name='COLUMNNAME'

AminSobati
پنج شنبه 03 بهمن 1387, 12:19 عصر
اول sp_helpconstraint بگیرین تا نام Constraint بدست بیاد بعد با دستور Alter table...drop constraint حذفش کنین

mpmsoft
پنج شنبه 03 بهمن 1387, 18:07 عصر
با تشکر
فقط یه مسئله دیگه من به چه شکل می تونم بگم فقط constraint یک فیلد رو بده
من به شکل زیر نویشتم جواب نداد


sp_helpconstraint "tbl_amlak.Archive"

در ضمن زمان اجرای این دستور در واقع دو Select انجام می شه من چطوری می تونم بگم نتیجه select دوم رو توی برنامم بدست بیارم

تست کردم نتیجه select اول نمایش داده می شه

GridView1.DataSource = Dst

AminSobati
پنج شنبه 03 بهمن 1387, 23:32 عصر
ببینید Query گرفتن از CONSTRAINT_COLUMN_USAGE یا CONSTRAINT_TABLE_USAGE کمکتون میکنه؟

mpmsoft
جمعه 04 بهمن 1387, 08:18 صبح
آقای ثباتی لطف می کنید نحوه نوشتن کوئریشو بنویسید ؟ با تشکر فراوان

mpmsoft
جمعه 04 بهمن 1387, 11:26 صبح
دوستان موفق شدم این کارو انجام بدم برای اینکه تاپیک بی نتیجه نمونه کدشو می ذارم تا شاید کسی بهش نیاز پیدا کنه



DECLARE @default sysname
SELECT @default = object_name(default_object_id)
FROM sys.columns
WHERE object_id = object_id('dbo.mytable')
AND name = 'mycolumn'
select @default as 'Fld_Constraint'

mannai29
شنبه 05 بهمن 1387, 08:29 صبح
دوستان موفق شدم این کارو انجام بدم برای اینکه تاپیک بی نتیجه نمونه کدشو می ذارم تا شاید کسی بهش نیاز پیدا کنه
فکر می کنم روشی که من در بند 4 نوشتم هم نتیجه میداده ضمن اینکه با روش شما هم زیاد تفاوتی نداشته.
فقط اینکه از روش شما نمیشه در ورژن 2000 استفاده کرد چون default_object_id رو نمیشناسه.

mpmsoft
شنبه 05 بهمن 1387, 09:39 صبح
روش بند 4 رو تست کردم جواب نداد

mannai29
شنبه 05 بهمن 1387, 09:52 صبح
میشه بگید مشکلش چی بود چون من هم در 2000 هم در 2008 تستش کردم .