반응형

 /**********************************************************************************************
-- Title : [2k5] 트리거 생성, 변경, 활성화 및 비활성화
-- Reference : hanbitbook.co.kr
-- Key word : create trigger alter trigger enable trigger disable trigger
**********************************************************************************************/
/*
-- 트리거 기본
*/
use tempdb;
go

drop table testtbl;
go

create table testtbl (id int, txt nvarchar(5));
go

insert into testtbl values(1, '우재남');
insert into testtbl values(2, '지운이');
insert into testtbl values(3, '한주연');
go

create trigger testtrg  -- 트리거 이름
on testtbl -- 트리거를 부착할 테이블
after  delete, update  -- 삭제,수정후에 작동하도록 지정
as
 print('트리거가 작동했습니다') ; -- 트리거 실행시 작동되는 코드들
go

insert into testtbl values(4, '당탕이');
go

update testtbl set txt = '우지운' where id = 2;
go

delete testtbl where id = 4;
go

select * from testtbl;
go


/*
-- 서버단 트리거
*/
--서버단 ddl 트리거 생성
create trigger ddltrg_server
 on all server
 after create_database, alter_database, drop_database
as
 print ' 경고: 데이터베이스 관련된 작업은 관리자에게 문의하세요.'
 rollback transaction;
go

--트리거 테스트
create database testdb;
go

--트리거 삭제
drop trigger ddltrg_server on all server;


/*
-- db단 트리거
*/
use sqldb;
go

create trigger ddltrg_sqldb
 on database
 after drop_table, alter_table
as
 print ' 경고: 테이블을 삭제하거나 변경하는 것은 금지되어 있습니다.'
 rollback transaction;
go

--테스트
drop table buytbl;
drop table usertbl;

--트리거 변경
alter trigger ddltrg_sqldb
 on database
 after ddl_table_view_events
as
 print ' 경고: 모든 테이블/뷰/인덱스에 대한 생성,변경,삭제는 금지되었습니다.'
 rollback transaction;
go

--테스트
create table prodtbl (prodid int, prodname nvarchar(20));

--트리거 비활성화
disable trigger ddltrg_sqldb on database;

--테스트(됨)
create table prodtbl (prodid int, prodname nvarchar(20));

--트리거 활성화
enable trigger ddltrg_sqldb on database;

--테스트(안됨)
create table prodtbl (prodid int, prodname nvarchar(20));

/*
 --db단 트리거 삭제
drop trigger ddltrg_sqldb on database;
*/

반응형

+ Recent posts