T - SQL 트리거

5009 단어 sql
트리거 는 표 와 밀접 하 게 연 결 된 특수 한 유형의 저장 과정 이다.
 
트리거 의 일반적인 기능 은 다음 과 같 습 니 다.
 
        (1) 데이터베이스 에 있 는 표를 직렬 로 수정 합 니 다.
 
        (2) 검사 제약 보다 더 복잡 한 제약 작업 을 실시한다.
 
        (3) 인용 완전 성 을 위반 하 는 조작 을 거절 하거나 거절 합 니 다.
 
        (4) 비교 표 수정 전후 데이터 간 의 차이.
 
트리거 를 만 들 기 전에 다음 규칙 을 준수 해 야 합 니 다:
 
         (1) CREATE TRIGGER 문 구 는 일괄 처리 의 첫 번 째 문장 이 어야 하 며, 일괄 처리 에 나타 난 다른 모든 문 구 는 CREATE TRIGGER 문 구 를 정의 하 는 일부분 으로 해 석 됩 니 다.
 
 (2) 모든 트리거 는 데이터 대상 이기 때문에 그 이름 은 식별 자의 이름 규칙 을 지 켜 야 한다.
 
         (3) 기본 적 인 상황 에서 트리거 를 만 드 는 권한 은 데이터 시트 의 소유자 에 게 할당 되 고 이 권한 을 다른 사용자 에 게 이전 할 수 없습니다.
 
 (4) 트리거 는 현재 데이터베이스 이외 의 대상 을 참조 할 수 있 지만 현재 데이터베이스 에 만 트리거 를 만 들 수 있 습 니 다.
 
 (5) 임시 데이터 시트 에 트리거 를 만 들 수 는 없 지만 임시 데이터 시트 를 참조 할 수 있 습 니 다.
 
         (6) 시스템 데이터 시트 에 트리거 를 만 들 수도 없고 시스템 데이터 시트 를 참조 할 수도 없다.
 
         (7) DELETE 나 UPDATE 를 사용 하여 정 의 된 외부 키 를 포함 하 는 표 에 서 는 INSTEAD OF 와 INSTEAD OF UPDATE 를 정의 할 수 없습니다.
 
 (8) TRUNCATE TABLE 문 구 는 where 자 구 를 포함 하지 않 는 DELETE 문구 와 유사 하지만 DELETE 트리거 를 일 으 키 지 않 습 니 다.
 
         (9) WRITETEXT 문 구 는 INSERT 나 UPDATE 트리거 를 일 으 키 지 않 습 니 다.
 
         (10) 아래 의 문 구 는 트리거 를 만 들 수 없습니다. ALERT DATABASE, CREATE DATABASE, DISK INIT, DISK INSIZE, DROP DATABASE, LOAD DATABASE, LOAD LOG, RECONFIGURE, RESTORE DATABASE, RESTORE LOG.
 
 
 
트리거 생 성 형식 은 다음 과 같 습 니 다.
 
 
CREATE TRIGGER[owner,]trigger_name

    On[owner,]table_name

    [WITH ENCRYPTION]

    {

    FOR{[INSERT][,UPDATE][,DELETE]}

    [NOT FORREPLICATION]

    AS sql_statements

    }
 
 
    위 문장 에서:
    ① trigger_name: 생 성 을 위 한 트리거 이름 은 SQL Server 의 이름 규칙 을 지 켜 야 하 며, 같은 데이터베이스 에 서 는 트리거 이름 이 같은 상황 이 발생 할 수 없습니다.
    ② table_name: 이 구문 에서 정 의 된 트리거 에 기반 한 표 입 니 다. 터치 발표 라 고도 합 니 다.
    ⑨ WITH ENCRYPTION 옵션: SQL Server 는 트리거 의 정의 텍스트 를 시스템 분류 표 syscoments 에 저장 합 니 다. 이 옵션 을 사용 하면 SQL Server 가 이 트리거 정의 텍스트 를 암호 화하 여 저장 하여 제3자 사용자 가 syscoments 표 에서 이 트리거 정의 텍스트 의 내용 을 읽 지 않도록 합 니 다.
    ④ NOT FOR REPLICATION 옵션: 복사 과정 에서 수정 터치 발표 데이터 가 나타 날 때 트리거 가 활성화 되 지 않 음 을 설명 합 니 다.
    ⑤ FOR {[INSERT] [, UPDATE] [, DELETE]}: 트리거 의 트리거 이 벤트 를 정의 합 니 다.어떤 트리거 가 표 의 여러 이벤트 에 의 해 실 행 될 때 INSERT, UPDATE, DELETE 사이 에서 사용 할 수 있 습 니 다. "기 호 는 간격 문자 로 조합 하여 표시 합 니 다.
    ⑥sql_statements: 트리거 이벤트 가 발생 했 을 때 (활성화 되 었 을 때) 실행 할 동작 을 정의 합 니 다.
 
 
 트리거 를 만 드 는 두 번 째 정의 형식의 트리거 이 벤트 는 INSERT 와 UPDATE 에 만 제 한 됩 니 다.문법 형식:
 
 
 
CREATE TRIGGER[owner,]trigger_name
     
        On[owner,]table_name

        [WITH ENCRYPTION]

        {

          FOR{[INSERT][,UPDATE]}

    [NOT FOR REPLICATION]

          AS

            {IF UPDATE(column)

            [{AND|OR}UPDATE(column)]

            |

            IF(COLUMNS UPDATED(){bitwise_operator}updated_bitmask

    {comparison_operator column_bitmask}

             sql_statements

            }

        }
 
 
    두 번 째 형식 에 서 는 트리거 의 트리거 조건 이 IF 구문 에서 지정 한 열 값 에 만 한정 되 어 있 음 을 IF 자구 로 설명 해 야 합 니 다.IF 자구 에서 지정 한 수 정 된 열 은 다음 과 같은 두 가지 형식 이 있 습 니 다.
        IF UPDATE(column)[{AND|OR}UPDATE(column)]
    화해시키다
        IF (COLUMNS UPDATED () {비트 연산 자) updated bitmask (L [연산 자 column bitmask) 중:
    ① column: 트리거 를 활성화 하 는 트리거 조건 에서 데 이 터 는 INSERT 또는 UPDATE 작업 으로 수 정 된 열 을 가리킨다.
    ② updated bitmask: 여러분 의 비트 차단 값 을 정의 합 니 다.
    ⑨ column bitmask: 검 측 대상 열 에 있 는 비트 차단 값 의 값 을 정의 합 니 다. 각 열 에 있 는 차단 위 치 는 터치 발표 에 있 는 번호 입 니 다.
④ COLUMNS UPDATED (): 지정 한 열의 열 값 이 삽입 되 거나 수정 되 었 는 지 확인 하 는 데 사 용 됩 니 다. 비트 연산 자, 연산 자 와 updated bitmask (여러분 의 비트 차단 값), column bitmask (각 검사 대상 열의 비트 차단 값) 을 비교 해 야 합 니 다.몇 개의 매개 변 수 를 함께 검사 대상 열 을 설명 합 니 다. 만약 하나의 터치 발표 에 5 개의 검사 대상 열 이 있다 면, 각 열 에 대응 하 는 차단 위 치 는 1 ~ 5 이 고, 해당 하 는 차단 수 치 는 20 ~ 24 입 니 다. 예 를 들 어 트리거 에서 1 과 열 3 의 열 값 이 수정 되 었 는 지 확인 해 야 하 는 IF 자 구 는: IF (COLUMNS UPDATED () & (1 + 4) < > 0 입 니 다.
주의: WITH ENCRYPTION 옵션 을 사용 할 때 두 가 지 를 주의해 야 합 니 다. 하 나 는 원본 트리거 의 파일 을 잃 어 버 리 면 syscoments 표 에서 암호 화 된 텍스트 를 다시 저장 할 수 없습니다. 다른 하 나 는 텍스트 암호 화 후 데이터 베 이 스 를 새 버 전 으로 업그레이드 할 때 수정 할 수 없고 새 버 전 으로 다시 저장 할 수 없습니다. 즉, 트리거 텍스트 를 수정 할 수 있 으 면 함부로 수정 하지 마 십시오.암호 화
 
【 예 】 트리거 를 만 들 고 학생 기록 을 추가 할 때 정 보 를 인쇄 합 니 다.
 
IF EXISTS(SELECT name FROM sysobjects where name='stu_tr' and type='TR' )
  DROP TRIGGER stu_tr
GO
CREATE TRIGGER stu_tr ON dbo.student
FOR  INSERT
AS 
 PRINT '      '
GO

INSERT dbo.student VALUES('CC',' ','C1',20)

GO
 
 
 
 
 
 

좋은 웹페이지 즐겨찾기