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밀리초

STATIC

전체 데이터를 미리 가져와서 사용하게 된다.

전체데이터를 복사하느라 시간이 오래 걸리고 원본 DB 에 변경 내용이 커서에는 반영되지 않는다.

 

KEYSET

키로 설정된 열만 복사하는 방식으로 원본 DB 의 변경사항에 대해서 커서가 확인할 수 있지만

insert 된 항목에 대해서는 알수가 없다

 

DYNAMIC (Default) - 가장 성능이 나쁨.

커서포인터의 키값만 복사되는 형태로 원본데이터의 모든 변경 사항을 커서가 확인할 수 있다.

 

 

> 사용하는 방법

DECLARE cursorTest CURSOR GLOBAL STATIC

FOR SELECT * FROM testTable

FORWARD_ONLY

시작 행부터 끝행의 방향으로만 커서가 이동

 

SCROLL

자유롬게 커서를 이동 시킬수 있다.

> FETCH 다음에 LAST, PRIOR,FIRST,NEXT 를 두어 자유롭게 위치변경이 가능하다.

 

 

 

예시)

DECLARE testCursor CURSOR GLOBAL SCROLL

FOR SELECT ID FROM testTable

OPEN testCursor

DECLARE @id varchar(40)

FETCH NEXT FROM testCursor INTO @id - 다음행으로 이동

 

FETCH PRIOR FROM testCursor INTO @id - 이전행으로 이동

FETCH FIRST FROM testCursor INTO @id - 처음행으로 이동

FETCH LAST FROM testCursor INTO @id - 마지막행으로 이동

 

RAISERROR

강제로 오류룰 발생 시키는 함수이다.

프로시저내에서 TRY, CATCH 의 정상 동작여부등 강제로 에러를 발생시키고자 할때 사용한다.

 

예) RAISERROR('강제로 오류를 발생 시킵니다.',10,1)

 

+ Recent posts