1: 트리거는 명시적으로 호출할 수 없지만 레코드가 테이블에 삽입, 업데이트 또는 삭제될 때 자동으로 활성화되는 특수 저장 프로시저입니다. 따라서 트리거를 사용하여 테이블에 대한 복잡한 무결성 제약 조건을 구현할 수 있습니다.
두 번째: SQL Server는 각 트리거에 대해 삽입된 테이블과 삭제된 테이블이라는 두 개의 전용 테이블을 생성합니다. 이 두 테이블은 시스템에 의해 유지 관리되며 데이터베이스가 아닌 메모리에 존재합니다. 이 두 테이블의 구조는 항상 트리거에 의해 작동되는 테이블의 구조와 동일합니다. 트리거 실행이 완료되면 해당 트리거와 관련된 두 개의 테이블도 삭제됩니다.
삭제된 테이블에는 삭제 또는 업데이트 문 실행으로 인해 테이블에서 삭제될 모든 행이 저장됩니다.
Inserted 테이블은 Insert 또는 Update 문 실행으로 인해 테이블에 삽입될 모든 행을 저장합니다.
세 가지: 대신 및 이후 트리거
SQL Server2000은 두 가지 트리거, 즉 대체 및 이후 트리거를 제공합니다. 이 두 트리거의 차이점은 동일한 방식으로 활성화된다는 점입니다.
트리거 대신 트리거를 실행하는 T-SQL 문을 대체하는 데 사용됩니다. 테이블 외에도 보기에서 지원할 수 있는 업데이트 작업을 확장하기 위해 트리거 대신 트리거를 사용할 수도 있습니다.
After 트리거는 Insert, Update 또는 Deleted 문 후에 실행되며 제약 조건 확인과 같은 작업은 After 트리거가 활성화되기 전에 발생합니다. 이후 트리거는 테이블에서만 사용할 수 있습니다.
테이블 또는 뷰의 각 수정 작업(삽입, 업데이트 및 삭제)은 대신 트리거를 가질 수 있으며, 테이블의 각 수정 작업은 여러 개의 After 트리거를 가질 수 있습니다.
4: 트리거 실행 프로세스
Insert, update 또는 delete 문이 제약 조건을 위반하는 경우 제약 조건 확인이 After 트리거에 있기 때문에 After 트리거가 실행되지 않습니다. . 따라서 After 트리거는 제약 조건을 초과할 수 없습니다.
대신 트리거를 실행한 작업 대신 트리거를 실행할 수 있습니다. 삽입된 테이블과 삭제된 테이블이 방금 생성되고 다른 작업이 발생하지 않은 경우 실행됩니다. 대신 트리거는 제약 조건 이전에 실행되므로 제약 조건의 일부 사전 처리를 수행할 수 있습니다.
5: T-SQL 문을 사용하여 트리거 만들기
기본 문은 다음과 같습니다.
create Trigger Trigger_name
on {table_name |
{for | After 대신 }
[ insert, update,delete ]
as
sql_statement
Trigger :
기본 설명은 다음과 같습니다.
drop Trigger Trigger_name
7: 데이터베이스의 기존 트리거 보기:
-- 기존 트리거 보기 데이터베이스
jxcSoftware 사용
이동
xtype='TR'
인 sysobjects에서 * 선택 - 단일 트리거 보기
exec sp_helptext 'Trigger name'
8: 트리거 수정:
기본 설명은 다음과 같습니다.
Alter Trigger Trigger_name
on {table_name | view_name}
{for | After 대신 }
[ 삽입, 업데이트, 삭제 ]
sql_statement
9: 관련 예 :
1: Orders 테이블에 트리거를 생성합니다. Orders 테이블에 주문 레코드를 삽입할 때 상품 테이블의 상태가 1(organizing)인지 확인합니다. 주문 테이블에 삽입하세요.
트리거 주문 삽입
주문시
삽입 후
if(상품에서 상태 선택,삽입
where products.name=inserted.goodsname)=1
시작
print '상품이 처리 중입니다'
print '주문을 확정할 수 없습니다'
트랜잭션 롤백 -- 롤백, 추가 방지
end
2: Orders 테이블에 삽입 트리거를 생성하고, 주문을 추가할 때 Goods에서 해당 제품 기록을 줄입니다. 테이블 재고 있음.
주문 시
트리거 orderinsert1
삽입 후
업데이트 상품 세트 저장=storage-inserted.Quantity
로 생성 >
from products,inserted where products.name=inserted.goodsname 3: Goods 테이블에 삭제 트리거를 생성하여 Goods 테이블을 구현하고 Orders 테이블 계단식 삭제. 트리거 상품 삭제 상품 삭제 후 주문에서 삭제 상품 이름이 있는 곳 (삭제된 이름 선택) 4: Orders 테이블에 업데이트 트리거를 생성하고 Orders 테이블의 주문 날짜(OrderDate) 열을 수동으로 수정할 수 없도록 모니터링합니다. orderdateupdate 트리거 생성 주문 시 업데이트 후 as if update(orderdate) start Raiserror('orderdate can be수정',10,1) 트랜잭션 롤백 end 5: Orders 테이블에 삽입 트리거를 생성하여 주문이 Orders로 전송되는지 확인하십시오. 테이블에 삽입된 제품 이름은 Goods 테이블에 있어야 합니다. 주문에 대한 트리거 orderinsert3 생성 삽입 후as
if (상품에서 개수(*) 선택, products.name=inserted.goodsname에 삽입됨)=0
begin
print ' 항목 없음 이 주문에 대한 상품'
트랜잭션 롤백
end
6: Orders 테이블에 삽입된 제품 정보가 추가되도록 Orders 테이블에 삽입 트리거를 만듭니다. Order 테이블
alter Trigger addOrder
on Orders
for insert
as
insert into Order
삽입된 ID, 삽입됨.goodName, 삽입됨.번호 선택