View Full Version : ایجاد یک CHECK Constraint
mohammadali10
سه شنبه 18 اسفند 1394, 04:49 صبح
سلام دوستان
من1 جدول دارم که اسم جدول کارمندان که فیلداش شامل ای دی و نام و پسورد و ایمیل و ای دی رییس هست که ای دی به ای دی رییس رلیشن زدیم
من میخوام چک کانسترینی درست کنم که کسی که ای دی ریسش توش مقداری هست دیگه رییس کسی نشه چه جوری میتونم همچین چکی بزنم؟
مثلا 4 تا کارمند داریم که ای دی هاشون به ترتیب 1 تا 4 هستش و یکی شون قسمت ای دی رییسش خالی(به معنی رییس) ای دی اینم مثلا 3 هست و فقط این ای دی میتونه در قسمت ای دی رییس 3تا کارمند دیگه باشه
parsdarab
چهارشنبه 19 اسفند 1394, 12:31 عصر
سلام
من با دستور زیر یه جدول ساختم که شامل ای دی و ای رئیس هست
create table parent_child
(
idp int primary key,
idc int
)
بعد برای اعمال محدودیت از دستور زیر استفاده کردم
alter table parent_child
with check add foreign key(idc) references parent_child(idp)
139519
بعد برای درج مقدار 6 چون در ستون اولی نیست اجازه نمی ده
mohammadali10
چهارشنبه 19 اسفند 1394, 17:50 عصر
سلام
من با دستور زیر یه جدول ساختم که شامل ای دی و ای رئیس هست
create table parent_child
(
idp int primary key,
idc int
)
بعد برای اعمال محدودیت از دستور زیر استفاده کردم
alter table parent_child
with check add foreign key(idc) references parent_child(idp)
139519
بعد برای درج مقدار 6 چون در ستون اولی نیست اجازه نمی ده
ممنون از شما نه منظورم این نیست این چیزی که شما فرمودین مربوط به رلیشن هست
مسئله این طوره که
الان شما برای ای دی 1 ,ای دی 10رو رییس کردین
الان ای دی 1 حق نداره رییس کسی باشه
من اینو میخوام
دوستان اگر راه دیگری هم برای حلش هست بفرمایین
parsdarab
پنج شنبه 20 اسفند 1394, 12:26 عصر
سلام
با استفاده از تریگر زیر میتونید چک کنید زمانی که فیلدی آپدیت میشه چک کنه آیا داده ها بر اساس گفته خودتون درست عمل میکنه یا نه؟
ابتدا باید تریگر را بسازید
create trigger [dbo].[parent_child_check_idc] on [dbo].[parent_child]
for update
as
declare @idc int;
declare @idr int;
set @idr=0;
--دریافت کد رئیس که میخواهد درج شود
select @idc=i.idc from inserted i;
--دریافت کد رئیس رئیس
select @idr=p.idc from [parent_child] p
where idp=@idc;
if(@idr is null or @idr='')
begin
commit;
end
else
begin
rollback
end
بعد دستور زیر را اجرا کنید
update parent_child set idc=10 where idp=2
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.