moji_helooo
جمعه 06 اردیبهشت 1392, 01:28 صبح
سلام. برای پایگاه داده ی کتابخانه روی جدولی که رابطه ی کتاب امانت دادن و گرفتن هست و چند تا fk داره تریگر زدم تا یه نفر نتونه مثلا دو تا کتاب پایگاه داده با خودش ببره. تریگر به صورت زیره:
CREATE TRIGGER notwobarrow ON barrowbook
FOR INSERT
AS
BEGIN
declare @borde int;
declare @ovorde int;
declare @state bit;
set @borde = (select COUNT (*) from barrowbook , inserted
where barrowbook.[شماره عضویت] = inserted.[شماره عضویت] and barrowbook.[شماره کتاب] = inserted.[شماره کتاب] and barrowbook.وضعیت = 1);
set @ovorde = (select COUNT (*) from barrowbook , inserted
where barrowbook.[شماره عضویت] = inserted.[شماره عضویت] and barrowbook.[شماره کتاب] = inserted.[شماره کتاب] and barrowbook.وضعیت = 0);
set @state = (select وضعیت from inserted);
if (@state = 1 and @borde > @ovorde )
begin
print 'شما این کتاب را قبلا برده و نیاورده اید و نمی توانید از یک کتاب بیشتر از یک ببرید.';
rollback;
end
END
ستون state اگر 1 باشه یعنی طرف کتاب رو به امانت برده و اگر 0 باشه یعنی پس اورده.
حالا مشکل اینجاست که انگار شرط درون اون if اصلا بررسی نمی شه و تحت هر شرایط دستورات داخل if اجرا می شن. مشکل کجاست؟
CREATE TRIGGER notwobarrow ON barrowbook
FOR INSERT
AS
BEGIN
declare @borde int;
declare @ovorde int;
declare @state bit;
set @borde = (select COUNT (*) from barrowbook , inserted
where barrowbook.[شماره عضویت] = inserted.[شماره عضویت] and barrowbook.[شماره کتاب] = inserted.[شماره کتاب] and barrowbook.وضعیت = 1);
set @ovorde = (select COUNT (*) from barrowbook , inserted
where barrowbook.[شماره عضویت] = inserted.[شماره عضویت] and barrowbook.[شماره کتاب] = inserted.[شماره کتاب] and barrowbook.وضعیت = 0);
set @state = (select وضعیت from inserted);
if (@state = 1 and @borde > @ovorde )
begin
print 'شما این کتاب را قبلا برده و نیاورده اید و نمی توانید از یک کتاب بیشتر از یک ببرید.';
rollback;
end
END
ستون state اگر 1 باشه یعنی طرف کتاب رو به امانت برده و اگر 0 باشه یعنی پس اورده.
حالا مشکل اینجاست که انگار شرط درون اون if اصلا بررسی نمی شه و تحت هر شرایط دستورات داخل if اجرا می شن. مشکل کجاست؟