SQLServer 트리거 생 성,삭제,수정,예제 코드 보기

3693 단어 SQLServer트리거
1.트리거 는 특수 한 저장 과정 o 로 o 를 명시 적 으로 호출 할 수 없 으 며 표 에 기록 p 업데이트 기록 을 삽입 하거나 기록 을 삭제 할 때 자동 으로 활성 화 됩 니 다.그래서 트리거 는 시계 에 대한 복잡 한 완전 성 제약 을 실현 하 는 데 사용 할 수 있다.2.SQL Server 는 트리거 마다 두 개의 전용 표를 만 들 었 습 니 다.Inserted 표 와 Deleted 표 입 니 다.이 시계 두 개.1.트리거 는 특수 한 저장 과정 o 로 o 를 명시 적 으로 호출 할 수 없 으 며 표 에 기록 p 업데이트 기록 을 삽입 하거나 기록 을 삭제 할 때 자동 으로 활성 화 됩 니 다.그래서 트리거 는 시계 에 대해 복잡 한 완전 성 을 실현 하 는 데 쓸 수 있다.2.SQL Server 는 트리거 마다 두 개의 전용 표를 만 들 었 습 니 다.Inserted 표 와 Deleted 표 입 니 다.이 두 시 계 는 데이터베이스 에 있 는 것 이 아니 라 시스템 에서 o 를 유지 합 니 다.이 두 표 의 구 조 는 항상 이 트리거 에 의 해 작용 하 는 표 의 구조 와 같다.트리거 가 실 행 된 후 o 가 이 트리거 와 관련 된 이 두 표 도 삭 제 됩 니 다.Deleted 표 는 Delete 나 Update 문 구 를 실행 하기 때문에 표 에서 삭제 할 모든 줄 을 저장 합 니 다.Inserted 표 는 Insert 나 Update 문 구 를 실행 하기 때문에 표 에 삽입 할 모든 줄 을 저장 합 니 다.3.Instead of 와 After 트리거 SQL Server 2000 은 두 가지 트리거 를 제공 합 니 다:Instead of 와 After 트리거.이 두 트리거 의 차 이 는 그들 이 활성 화 된 것 과 같다.Instead of 트리거 는 트리거 가 실 행 된 T-SQL 문 구 를 대체 하 는 데 사용 된다.표 외 에 oInstead of 트리거 도 보기 o 에서 보기 가 지원 할 수 있 는 업데이트 작업 을 확장 하 는 데 사용 할 수 있 습 니 다.After 트리거 는 Insert,Update 또는 Deleted 문 구 를 실행 한 후 o 를 실행 하여 제약 검 사 를 하 는 등 After 트리거 가 활성화 되 기 전에 발생 합 니 다.애 프 터 트리거 는 시계 에 만 사용 할 수 있 습 니 다.하나의 시계 나 보기 의 모든 수정 동작(insert,update,delete)은 instead of 트리거 o 의 시계 마다 여러 개의 애 프 터 트리거 가 있 을 수 있 습 니 다.4.트리거 의 실행 과정 은 Insertpupdate 나 delete 문구 가 제약 을 위반 하면 o 를 실행 하지 않 습 니 다.제약 에 대한 검 사 는 After 트리거 가 흥분 하기 전에 발생 하기 때 문 입 니 다.그래서 애 프 터 트리거 는 제약 을 뛰 어 넘 을 수 없습니다.Instead of 트리거 는 자극 동작 을 대체 하여 실행 할 수 있 습 니 다.그것 은 Inserted 표 와 Deleted 표 에서 o 를 만 들 었 을 때 다른 작업 이 일어나 지 않 았 을 때 실 행 됩 니 다.Instead of 트리거 가 제약 하기 전에 o 를 실행 하기 때문에 제약 을 미리 처리 할 수 있 습 니 다.5:T-SQL 문 구 를 사용 하여 트리거 기본 문 구 를 만 듭 니 다.create trigger triggername on {table_name | view_name} {for | After | Instead of } [ insert, update,delete ] as sql_statement 6:트리거 삭제:기본 문 구 는 다음 과 같 습 니 다:drop trigger triggername 7:데이터베이스 에 있 는 트리거 보기:-데이터베이스 에 있 는 트리거 보기 use jxcSoftware go select*from sysobjects where xtype='TR'--단일 트리거 보기 exec sphelptext'트리거 이름'8:트리거 수정:기본 문 구 는 다음 과 같 습 니 다:alter trigger triggername on {table_name | view_name} {for | After | Instead of } [ insert, update,delete ] as sql_statement 9:관련 예제:1:Orders 표 에 트리거 o 를 만 들 때 Orders 표 에 주문 기록 을 삽입 할 때 o 는 goods 표 의 상품 상태 status 가 1 인지(정리 중)o 는 Orders 표 에 이 주문 서 를 추가 할 수 없습니다.create trigger orderinsert on orders after insert as if (select status from goods,inserted where goods.name=inserted.goodname)=1 begin print'the goods is being processed'print'the order cannot be committed'rollback transaction-스크롤 백 은 end 2 가입 을 피 합 니 다.Orders 표 에 트리거 o 를 삽입 하여 주문 서 를 추가 할 때 o 는 Goods 표 에 해당 하 는 상품 기록 의 재 고 를 감소 합 니 다.create trigger ordereinsert 1 on orders after insert as update goods set storage=storage-inserted.quantity from goods,inserted where goods.name=inserted.goodname 3:Goods 표 에 삭제 트리거 o 를 만들어 Goods 표 와 Orders 표 의 연결 삭 제 를 실현 합 니 다.create trigger gooddelete on goods after delete as delete from orders where goodname in(select name from deleted)4:Orders 표 에 업데이트 트리거 o 감시 Orders 표 의 주문 날짜(OrderDate)열 o 를 만들어 수 동 으로 수정 할 수 없습니다.create trigger orderdate update on orders after update as if update(orderdate)begin raisorror('orderdate cannot be modified',10,1)rollback transaction end 5:Orders 표 에 트리거 o 를 삽입 하여 Orders 표 에 삽입 하 는 상품 명 은 Goods 표 에 반드시 존재 해 야 합 니 다.create trigger orderinsert 3 on orders after insert as if(select count(*)from goods,inserted where goods.name=inserted.goodname)=0 begin print'no entry in goods for this order'rollback transaction end 6:주문 표 삽입 트리거 만 들 기,Orders 표 에 삽 입 된 상품 정 보 를 Order 표 에 alter trigger addOrder on Orders for insert as insert into Order select inserted.Id,inserted.goodName,inserted.Number from inserted 를 추가 합 니 다.

좋은 웹페이지 즐겨찾기