- 현재의 격리수준확인
 dbcc useroption

☆ isolation level (격리수준) ☆

- read committed
  (커밋된읽기)

- read uncommitted
  (커밋되지않은읽기)
  동시성은 좋으나 데이터 일관성떨어짐

- repeatable read
  (반복읽기)
  begin tran select 를 수행하여 공유잠금이 걸려있을때 다른 사용자의 데이터의 접근을 막아줌

- serializable
  repeatable read 설정하면 데이터 변경작업은 막을순 있으나 데이터입력은가능함 이를 팬텀읽기하로 함 팬텀 읽기도 방지하기 위함
  가장일관성이 높으나 동시성이 가장떨어짐

- snapshop
  트랜잭션진행중에 데이터 입력하면 실제테이블에 적용하지않고 우선 tempdb에 적용시켜놓음 그리고 테이블 트랜잭션이 커밋된이후
  원래 테이블에 데이터입력 (행버전관리)

 

데이터 베이스의 전체 테이블의 내용을 엑셀로 저장할 때 방법입니다.

 

엑셀로 빼낼 데이터 베이스를 선택 우클릭 테스크>데이터 내보내기


 

 

다음
 

대상에서 엑셀을 선택

 

 

파일 경로 지정

 

 

다음

 

 

저장할 테이블 선택

 

 

하단에 오류나 짤림 발생시 무시할건지 실패로 만들것인지 선택

 

 

마침.

 

 

다음

 

 

엑셀로 저장중~

 

 

파일을 열어 확인해 보면 테이블단위로 시트로 구분되어 데이터가 저장됩니다.

 

SET QUOTED_IDENTIFIER OFF

* Procedure 의 결과 내용을 select 하고 싶을 땐 openqurey 를 이용해서 select 할수 있다
  - 리턴되는 형식이 일정하지 않아도 됨
----------------------------------------------------------------------------------------------
OPENQUERY(링크드서버명,'exec 프로시저명') : 반드시 링크드서버로 구성이 되어야 한다.
SELECT  *
INTO    #tmpTable
FROM   
----------------------------------------------------------------------------------------------
 
 * 이게 귀찮다면 temp table 을 선언하여 insert 후 select 하는 방법도 있다.
   -단, 리턴되는 형식이 일정해야함
----------------------------------------------------------------------------------------------
​INSERT 템프테이블 EXEC 프로시저
CREATE TABLE #TEMPTABLE
(
 id varchar(max),
 name varchar(max),
 [group] varchar(max)
)
INSERT #TEMPTABLE EXEC test_procedure
SELECT * FROM #TEMPTABLE
----------------------------------------------------------------------------------------------

 

join 대상 테이블의 값중에

특정 컬럼이 값이 max인 데이터만을 가지고

join 하고 싶을 때 아래와 같이 사용합니다.

 

SQL Server 2005 이상에서는 아래와 같이

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

SELECT  *
FROM    JOB A
          OUTER APPLY
           
(
           
SELECT  TOP 1 *
           
FROM    JOBSTATUS B
           
WHERE   B.JOBID = A.JOBID
           
ORDER BY B.seq DESC
           
) B

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

 

그 전 버전에서는

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

SELECT  *
FROM    JOB A
            LEFT JOIN
            JOBSTATUS B
            ON   B.ID =
                                 (
                                 SELECT  TOP 1 ID
                                 FROM    JOBSTATUS C
                                 WHERE   C.JOBID = A.JOBID
                                 ORDER BY C.SEQ DESC
                                 )

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

 

참고

http://stackoverflow.com/questions/4851949/joining-to-max-date-record-in-group

'DB' 카테고리의 다른 글

(MSSQL) 프로시저에서 " 허용 (더블커테이션)  (0) 2017.04.13
(MSSQL) select procedure (OPENQUERY)  (0) 2017.04.13
(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

프로젝트를 진행하다보니

프로시저 내에서 씨리얼하게 값을 증가시켜 데이터를 저장해야 하는일이 생겼다

프로시저내에서 전역변수를 선언할수는 없고

테이블을 하나 만들어서 컬럼을 identity 열로 지정하여 가져올까도 했지만 Transaction 이 발생되서 ... GG

코딩상으로는 전역변수 int 하나 만들어놓고 ++ 시키면 되는데

SQL 은 그런 기능이 없나 하다가 찾게된 기능

코딩상에서 전역변수를 사용하는것과 비슷하다.

 

시퀀스 하나 만들고 (SQL 2012 에서만 지원된다.)

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

CREATE SEQUENCE TESTIDX AS INT
START WITH 1 -- 시작수
INCREMENT BY 1 -- 증가수

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

 

프로시저내에서 아래와 같이 활용하면 된다.

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

NEXT VALUE FOR TESTIDX

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

 

SEQUENCE 는 지정숫자부터 증가하게하거나 초기화 및 띄어넘기가 가능하다

'DB' 카테고리의 다른 글

(MSSQL) select procedure (OPENQUERY)  (0) 2017.04.13
(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

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에서 오류 메시지를 출력하면 시스템 관리자에게 문의하십시오. 

 

+ Recent posts