2013-02-27 2 views
0

나는 나의 할당을 끝내기 위해 매고 있지만 나는 약간의 문제에 직면하고 있으므로 나는 당신의 도움이 필요하다. 나는 6 개의 컬럼 이름 (c_id, c_name, c_transfer, c_balance, day, time)을 가진 테이블 이름 클라이언트를 craeted했다. 할당은 날 열 Satauarday 및 일요일 포함 된 미안 은행 닫힌 및 시간 열 경우 05시 09시 포함되어 있습니다 인쇄 할 수있는 트리거를 만들려면 시간이 삽입 된 조건 열 캔트 reguarding 않는 경우 .방아쇠 할당

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

어떤 종류의 오류가 발생하고 있습니까? 나는 오류가'rollback; 저기에 몇 가지 문제가있다. 그러나 오류를 확인하고 싶습니다. –

+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

삽입 된 테이블은 FOR UPDATE 트리거에서도 찾을 수 있습니다. 또한 트리거는 한 번에 하나의 행만 삽입한다고 가정하고 다른 요일에서 둘 이상의 행이 삽입되는 경우 이상한 결과가 발생할 수 있습니다. –

+0

괜찮 았어.하지만 시간이 혼란 스럽다. 난 시간이 9 시가 넘고 5 시가 안되면 삽입 할 수 없다. – Mufasil

+0

케네스 피셔가 좋은 지적입니다. 방아쇠를 변경하여 멀티 행 삽입 작업을해야합니다. 그러나 1 개만 요구 사항을 충족시키지 않더라도 모든 행을 지금 롤백합니다. – JodyT