CREATE TRIGGER trg_testDelete -- 트리거 이름

ON TEST -- 테이블 이름

AFTER UPDATE,DELETE -- update 후에 작동하게 지정 (DELETE, INSERT)

AS

INSERT INTO TEST2

SELECT * FROM updated -- (deleted, inserted)

 

INSERT INTO TEST2

SELECT * FROM deleted

 

TEST 테이블이 없데이트 될때 TEST2 테이블에 데이터가 insert 되도록 동작

 

----------------------------------------------------------------------------------------------

 

CREATE TRIGGER trg_testDelete -- 트리거 이름

ON TEST -- 테이블 이름

INSTEAD OF INSERT -- Insert 이전에 작동하게 지정 (DELETE, INSERT)

AS

INSERT INTO TEST2

SELECT * FROM inserted

 

----------------------------------------------------------------------------------------------

테이블에 연관된 trigger 확인 프로시저.

exec sp_helptrigger 테이블명

예) exec sp_helptrigger TEST_JUN

'DB' 카테고리의 다른 글

(MSSQL) MAX 값과 join 하기  (0) 2017.04.13
(MSSQL) Sequence  (0) 2017.04.13
(MSSQL) 트리거 (Trigger)  (0) 2017.04.13
(MSSQL) TOP(N) 데이터 몇건만 가져오기  (0) 2017.04.13
(MSSQL) 오류상태 파악 함수  (0) 2017.04.13
(MSSQL) identity 컬럼 조작하기 (CHECKIDENT)  (0) 2017.04.13

> SELECT TOP(10) * FROM TEST ORDER BY SEQ

   10건만 가져오기

 

> SELECT TOP(0.1) PERCENT * FROM TEST ORDER BY SEQ

   상위 0.1% 만 출력하기

 

> SELECT TOP(0.1) PERCENT WITH TIES * FROM TEST ORDER BY SEQ

 상위 0.1% 출력하되 마지막에 같은 값이 있다면 모두 출력

 

'DB' 카테고리의 다른 글

(MSSQL) Sequence  (0) 2017.04.13
(MSSQL) 트리거 (Trigger)  (0) 2017.04.13
(MSSQL) TOP(N) 데이터 몇건만 가져오기  (0) 2017.04.13
(MSSQL) 오류상태 파악 함수  (0) 2017.04.13
(MSSQL) identity 컬럼 조작하기 (CHECKIDENT)  (0) 2017.04.13
(MSSQL) @@ 시스템함수  (0) 2017.04.13

ERROR_NUMBER() : 오류번호

ERROR_MESSAGE() : 오류메세지

ERROR_SEVERITY() : 오류심각도

ERROR_STATE() : 오류상태번호

ERROR_LINE() : 오류발생시킨 행 번호
ERROR_PROCEDURE() : 오류가 발생한 저장 프로시저나 트리거의 이름

 

identity 로 설정된 컬럼은 계속 증가하게 된다.

이를 초기화 하거나 지정되 값으로 설정하는 방법.

 

----------------------------------------------------------

DBCC CHECKIDENT('테이블명', RESEED, 설정할 숫자)

----------------------------------------------------------

 

해당 테이블의 identity 컬럼의 현재 순번을 조회하기위해선 아래와 같이 하면 알수 있다.

 

DBCC CHECKIDENT('테이블명')

결과:

ID 정보 확인: 현재 ID 값은 '10'이며, 현재 열 값은 '10'입니다.
DBCC 실행이 완료되었습니다. DBCC에서 오류 메시지를 출력하면 시스템 관리자에게 문의하십시오. 

 

SELECT @@TRANCOUNT : 현재 진행중인 트랜젝션의 수

SELECT @@LOCK_TIMEOUT : time out 설정 값 -1 이면 무한대

ALTER DATABASE testDB SET ALLPW_SNAP_ISOLATION ON;

SET TRANSACTION ISOLATION LEVEL SNAPSHOP

 

SQL 로 인해서 잠금(LOCK)이 걸린 테이블이라도 메모리(데이터 캐시)가 아닌 데이터 파일의 내용을 무소건 읽어올 수 있게 만들어 준다.

 

기본적으로 BEGIN TRAN 을 내부적으로 자동으로 붙여주게 되어

COMMIT 나 ROLLBACK 문이 수행될때 까지 트랜잭션이 계속 진행 중인 상태가 된다.

 

이를 활성화 하려면

 

SET IMPLICIT_TRANSACTIONS ON

테이블의 Row 를 순서대로 하나씩 읽어가면서 데이터 처리를 가능하게 한다.

.net 에 foreach 문이라고 이해하면 쉬울듯

 

사용방법은..

 

DECLARE testCur CURSOR FOR -- 커서정의

SELECT ID,NAME FROM TEST_JUN -- 반복해서 돌릴데이터


OPEN testCur -- 커서 열기


DECLARE @id varchar(50) -- ID 저장변수
DECLARE @name varchar(50) -- NAME 저장변수


FETCH NEXT FROM testCur INTO @id,@name -- 값 대입
WHILE(@@FETCH_STATUS=0) -- 행이 없을때까지 반복
BEGIN
   PRINT @id + ' : ' + @name
   FETCH NEXT FROM testCur INTO @id,@name -- 다음행값을 대입
END


CLOSE testCur -- 커서닫기
DEALLOCATE testCur -- 커서 해재

 

위 결과는 아래와 같다. 테이블의 id, name 모든데이터가 출력

21 : 강준22
22 : 강준23
23 : 강준100
24 : 강준101
25 : 강준102
26 : 강준103
27 : 강준104
28 : 강준105
29 : 강준106
3 : 강준4
30 : 강준107
31 : 강준108
32 : 강준109
33 : 강준110
34 : 강준111

 

SELECT  o.name, m.definition
FROM sys.sql_modules m JOIN sys.objects o ON m.object_id = o.object_id AND o.type='P'

SET STATISTICS TIME ON;

 

위속성을 주면 아래처럼 SQL 쿼리의 처리시간을 나타낸다.

 

SQL Server 구문 분석 및 컴파일 시간:
   CPU 시간 = 0ms, 경과 시간 = 3ms.

(2개 행이 영향을 받음)

 SQL Server 실행 시간:
 CPU 시간 = 0밀리초, 경과 시간 = 1밀리초

+ Recent posts