ورود

View Full Version : ایجاد یک check constraint و استفاده در چندین جدول



iman_pc_love
یک شنبه 30 بهمن 1390, 21:41 عصر
فرض کنید 10 تا جدول داریم که تو هر کدون یه فیلد تکراری داریم ، چطور میشه یه Check Constraint تعریف کرد و بعد آن رو به این فیلدها در جداول مختلف تخصیص داد، به طوری که مثلاً اگه فردا روزی Check constrait تغییر کرد رو فیلد مربوطه در تمام جداول تاثیر داشته باشه؟ یا نمیشه این کار رو کرد و باید تو هر جدول یه check constraint جدا تعریف کنیم؟

یوسف زالی
دوشنبه 01 اسفند 1390, 14:49 عصر
سلام.
شما می تونید یک تابع تعریف کنید که در اون ارزش فیلد رو ارزیابی کنید و همین تابع رو در تمام چک ها استفاده کنید.
در صورت تغییر در تعریف تابع، تمام چک ها با شرایط جدبد تغییر خواهند کرد.

iman_pc_love
دوشنبه 01 اسفند 1390, 18:44 عصر
من فقط با management studio کار کردم میشه دقیقا بگید چکار باید کرد؟ مثلا برا چک کردن فیلدی به نام ID که مقدارش مثلا بین 0 تا 10 باشه تو 3 تا جدول چه کار باید کرد؟ تابع رو کجا تعریف کنم خروجی ورودیش چی باشه و تو check constrait چطور تابع رو فراخونی کنم؟

Galawij
دوشنبه 01 اسفند 1390, 22:27 عصر
سلام،
من اسم جداولی که خواستم بر آنها قید اعمال بشه را داخل یک جدول دیگر با نام TableList ریختم و نام جداول را از این جدول گرفتم. شما می تونید از جداول موقت هم استفاده کنید(نام فیلدی هم که قید ها روی آنها اعمال می شود، در این مثال Pasport است).
declare @tabname nvarchar(100)
declare tab cursor for Select distinct TablesName from dbo.TableList
open tab
fetch next from tab into @tabname
while @@FETCH_STATUS = 0
begin
exec('alter table '+@tabname+' WITH CHECK ADD CONSTRAINT [CK_'+@tabname+'] CHECK (([Pasport]>(20)))')
fetch next from tab into @tabname
end
close tab
deallocate tab
نکته: در صورتی که مواردی بودند که شما دو حالت انتخاب داشتید، تابع یا قید؟ قید را بر استفاده از تابع ترجیح بدید.