2013-02-27 2 views
0

Я свяжусь, чтобы выполнить свое задание, но мне грозит какая-то проблема, поэтому мне нужна ваша помощь Я пробовал клиента имени таблицы, содержащего 6 имен столбцов (c_id, c_name, c_transfer, c_balance, day, time), теперь назначение заключается в том, что мне нужно создать триггер, в котором в дневном столбце содержится Satauarday и в воскресенье он печатает. К сожалению, банк закрыт, и если временный столбец содержит от 05:00 до 09:00, он будет вставлен, но если время не будет отменено, , Код следующим образом:назначение триггера

create table client 
(
c_id int identity primary key, 
c_name varchar(50), 
c_transfer money, 
c_balance money, 
[date] datetime, 
[day] varchar(50), 
) 

alter trigger transactions 
ON client 
for Insert 
as 
begin 
    if(select top 1 [day] from client order by c_id desc)='Satuarday' 
    begin 
    print'Sorry Bank is closed today' 
    rollback; 
    commit; 
    end 
    if(select top 1 [day] from client order by c_id desc)= 'Sunday' 
    begin 
    print'Sorry Bank is closed today' 
    rollback; 
    commit; 
    end 
    if(select top 1 date from client order by c_id desc)not in (DATEDIFF(hh,'09:00','05:00')) 
    begin 
    print'Sorry Bank time is not this...' 
    rollback; 
    commit; 
    end 
end 
+0

Какая ошибка вы получаете? Я уверен, что ошибка связана с откатом; совершить, - там есть пара проблем. Но я бы хотел, чтобы ошибка была уверена. –

+0

жаль, что я пытаюсь выполнить код, я полностью смущен, если их ошибка, которую вы нашли, пожалуйста, укажите и исправьте это пожалуйста. – Mufasil

+0

Вы не можете использовать как откат, так и фиксацию. Откат отменяет все изменения данных, сделанные с начала транзакции. Конец принимает эти изменения и делает их постоянной частью базы данных. – JodyT

ответ

0

Что вы ищете является Inserted столом. Эта таблица может использоваться внутри триггера FOR INSERT и содержит строку, которая вставляется.

GO 
CREATE TRIGGER transactions 
ON client 
FOR INSERT AS 
BEGIN 
    IF EXISTS(SELECT [day] FROM inserted 
      WHERE ([day] IN ('saturday', 'sunday')) 
      OR (DATEPART(hh,[date]) <= 5) OR DATEPART(hh,[date]) >= 9) 
    BEGIN 
    PRINT'Sorry Bank is closed at this time.' 
    ROLLBACK; 
    END; 
END; 
+0

Таблицу Inserted также можно найти в триггерах FOR UPDATE. Также ваш триггер предполагает только одну строку, вставленную за раз, и может получить нечетные результаты, если вставлено более одной строки из разных дней. –

+0

ОК это сделано, но я запутался во временном столбце, я хочу, чтобы, если время вставлено больше 9:00 и меньше, чем 5:00, строка can not insert. – Mufasil

+0

Кеннет Фишер сделал хороший момент. Я изменил триггер, поэтому теперь я должен работать для многострочных вставок. Однако теперь он будет откатывать ВСЕ строки, даже если только 1 не соответствует требованиям. – JodyT

Смежные вопросы