>php教程 >PHP开发 >SQL Server 트리거 생성, 삭제, 수정, 보기

SQL Server 트리거 생성, 삭제, 수정, 보기

高洛峰
高洛峰원래의
2016-12-14 16:05:191126검색

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, 삽입됨.번호 선택


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:SQL Server 트리거다음 기사:SQL Server 트리거