sqlserver 트리거 학습(자동 번호 구현)

3799 단어 sqlserver트리거
요약 할 때 자주 사용 하 는 기본 점 은 다음 과 같다.1.트리거 는 두 가지 유형 이 있 는데 그것 이 바로 데이터 정의 언어 트리거(DDL 트리거)와 데이터 조작 언어 트리거(DML 트리거)이다.DDL 트리거:사용자 가 데이터베이스 에 대한 데이터 정의(CREATE,ALTER,DROP 또는 비슷 한 문구)를 실행 하여 데이터베이스 구 조 를 수정 할 때 활성화 하여 응답 합 니 다.DML 트리거:사용자 가 데이터 베 이 스 를 실행 할 때 발생 합 니 다.트리거 의 코드 는 자동 으로 호출 됩 니 다.2.DML 트리거 분류:Insert 트리거,Delete 트리거,Update 트리거,위의 임의의 유형 혼합.3.트리거 생 성 문법:
 
CREATE TRIGGER <trigger name>
ON <table or view>
{{{FOR|AFTER} <[INSERT] [,] [UPDATE],[DELETE]>}|INSTEAN OF}
AS
<sql statement>
4.트리거 는 표 나 보기에 추가 해 야 하 며 트리거 는 따로 존재 할 수 없습니다.AFTER 또는 FOR 트리거 는 보기,INSTEAD OF 지원 표 또는 보 기 를 지원 하지 않 습 니 다.5.INSERT 트리거 에서 SQL Server 는 줄 을 삽입 하 는 복사 본 을 만 들 고 이 복사 본 을 특수 표 Insert 표 에 삽입 합 니 다.이 표 는 트리거 역할 영역 에 만 존재 합 니 다.6.DELETE 트리거 에서 SQL Server 는 줄 을 삭제 하 는 복사 본 을 만 들 고 이 복사 본 을 특수 표 Delete 표 에 삽입 합 니 다.이 시 계 는 트리거 역할 영역 에 만 존재 합 니 다.7.UPDATE 트리거 에서 SQL Server 는 업 데 이 트 된 기록 이 기 존의 기록 을 삭제 하고 업 데 이 트 된 신기록 을 삽입 한 것 이 라 고 생각 하기 때문에 UPDATE 트리거 에는 Insert 와 Delete 두 개의 특수 표 가 포함 되 어 있 고 트리거 역할 영역 만 존재 하 며 이 두 표 의 줄 수 는 완전히 같다.8.트리거 는 가능 한 한 짧 습 니 다.트리거 와 트리거 안의 문 구 는 함께 처리 되 기 때 문 입 니 다.즉,문장 이 실 행 될 때 까지 트리거 가 완 성 된 것 입 니 다.코드 가 길 면 트리거 가 오래 걸 릴 겁 니 다.다음은 자동 번호 기능 을 실현 하 는 예 입 니 다.
 
-- , , : , 1
-- PJ+"-"+" "+"-"+" "+"-"+" "
-- :PJ-ABCD-120805-0001
create table testAccount --
(
tAccName nvarchar(100), --
tAccId nvarchar(32) --
)
create table testProject --
(
tProName nvarchar(100), --
tProId nvarchar(32), --
tIdAcc nvarchar(100), --
tProGuid nvarchar(64) --guid
)
go
create trigger T_AutoNumber
on testProject
after insert
as
begin
declare @one nvarchar(8), -- ,PJ
@two nvarchar(32), -- ,
@three nvarchar(8), -- ,
@four int, -- ,
@guid nvarchar(64) --guid
set @one='PJ'
set @three= convert( varchar(8),GETDATE(),112)
-- Inserted guid
select @two=tIdAcc,@guid=tProGuid from Inserted
--
select @four=max(cast(right(tProId,4)as int))
from testProject
where tIdAcc=@two
-- 1 , 1
if @four is null
set @four=0
else
set @four=cast(@four as int)
set @four=@four+1
update testProject set tProId=@one+'-'+@two+'-'+@three+'-'+right('0000'+cast(@four as varchar),4) where tProGuid=@guid
end
go
--
insert into testAccount values (' ','XXYGS')
insert into testAccount values (' ','CXY')
insert into testProject (tProName,tIdAcc,tProGuid)values (' ','XXYGS',newid())
insert into testProject (tProName,tIdAcc,tProGuid)values (' ','XXYGS',newid())
insert into testProject (tProName,tIdAcc,tProGuid)values (' ','CXY',newid())
select * from testProject
drop table testAccount
drop table testProject
9.디 버 깅 트리거:새 검색 창 에 코드 를 입력 하고 F11 을 누 르 면 다음 스 크 립 트 를 한 문장 씩 실행 하여 트리거 에 들 어 갈 수 있 습 니 다.트리거 에 정지점 을 설정 하고 F11 구문 을 누 르 면 실 행 됩 니 다.
 
begin tran
insert into testProject (tProName,tIdAcc,tProGuid)values (' ','XXYGS',newid())
insert into testProject (tProName,tIdAcc,tProGuid)values (' ','XXYGS',newid())
insert into testProject (tProName,tIdAcc,tProGuid)values (' ','CXY',newid())
if @@TRANCOUNT>0
rollback tran

좋은 웹페이지 즐겨찾기