본문 바로가기

Database/MS-SQL

DB 테이블변경 트리거 롭 테이블고 ARTER 테이블 막기 트리거

반응형







USE master
CREATE DATABASE sqlDB
GO

USE sqlDB
CREATE TABLE userTbl -- 사용자테이블
( userID  nchar(8) NOT NULL PRIMARY KEY, -- 사용자아이디
  name    nvarchar(10) NOT NULL, -- 이름
  birthYear   int NOT NULL,  -- 출생년도
  addr  nchar(4) NOT NULL, -- 지역(경기,서울,경남,전북식으로2글자만입력)
  mobile1 nchar(3), -- 휴대폰의국번(011, 016, 017, 018, 019, 010 등)
  mobile2   nchar(8), -- 휴대폰의나머지전화번호(하이픈제외)
height    smallint  -- 신장
)
GO
CREATE TABLE buyTbl -- 사용자구매테이블
(  num int IDENTITY NOT NULL PRIMARY KEY, -- 순번(PK)
   userid  nchar(8) NOT NULL --아이디(FK)
FOREIGN KEY REFERENCES userTbl(userid),
   prodName nchar(6) NOT NULL, -- 물품명
   groupName nchar(4)  , -- 분류
   price     int  NOT NULL, -- 단가
   amount    smallint  NOT NULL -- 수량
)
GO















USE master ;
RESTORE DATABASE sqlDB FROM DISK ='c:\sqldb.bak' WITH REPLACE ;

USE sqlDB;
GO
CREATE TRIGGER ddlTrg_sqlDB
ON DATABASE
AFTER DROP_TABLE, ALTER_TABLE
AS
PRINT ' 경고: 테이블을 삭제하거나 변경하는 것은 금지되어 있습니다.'
ROLLBACK TRANSACTION;

DROP TABLE buyTbl;

DROP TABLE userTbl;

ALTER TRIGGER ddlTrg_sqlDB
ON DATABASE
AFTER DDL_TABLE_VIEW_EVENTS
AS
PRINT ' 경고: 모든 테이블/뷰/인덱스에 대한 생성,변경,삭제는 금지되었습니다.'
ROLLBACK TRANSACTION;

CREATE TABLE prodTbl (prodID INT, prodName NVARCHAR(20));

DISABLE TRIGGER ddlTrg_sqlDB ON DATABASE;

ENABLE TRIGGER ddlTrg_sqlDB ON DATABASE;

CREATE TRIGGER ddlTrg_server
ON ALL SERVER
AFTER CREATE_DATABASE, ALTER_DATABASE, DROP_DATABASE
AS
PRINT ' 경고: 데이터베이스 관련된 작업은 관리자에게 문의하세요.'
ROLLBACK TRANSACTION;

CREATE DATABASE testDB;

DROP TRIGGER ddlTrg_server ON ALL SERVER;

USE sqlDB;
DROP TRIGGER ddlTrg_sqlDB ON DATABASE;

-- 여기서 잠깐 (P645)
EXEC sp_configure 'nested triggers', 0
RECONFIGURE;



일반적인 트리거는 테이블밑에 열에 있으니
DDL 트리거는 아래 그림처럼 들어간다