USE [DBMS];

GO EXEC [프로시저명] [넣어야될 파라미터 값];

'[DB] > [MSSQL]' 카테고리의 다른 글

소계, 합계 구하기  (0) 2020.04.27
프로시저 생성시 변수에 데이터 넣기  (0) 2020.04.25
# [MSSQL] LOCK 걸린 쿼리 확인 후 강제 KILL  (0) 2020.04.17
# 저장 프로시저  (0) 2020.04.07
# 트랜잭션  (0) 2020.04.07

# ROLLUP 

 - 소그룹간의 소계를 계산한다.

- ROLLUP은 GRPUP BY의 확장 형태로 사용하기 쉬운데, GRPOUP BY에 있는 항목들을 

오른쪽에서 왼쪽순으로 그룹으로 묶어 집계를 낸다.

EX) GROUP BY A,B,C ROLLUP  

총합계의 행이 나온다 

 

 

# CUBE

- CUBE 함수는 GROUP BY 항목들 간 모든 경우의 수로 그룹을 생성하여 집계를 낸다.

-CUBE는 ROLLUP보다 조금 더 상세한 결과를 낸다.

-> CUBE는 ROLLUP과 그룹을 묶어주는 방식이 다르다.

 

'[DB] > [MSSQL]' 카테고리의 다른 글

저장프로시저 실행  (0) 2020.04.30
프로시저 생성시 변수에 데이터 넣기  (0) 2020.04.25
# [MSSQL] LOCK 걸린 쿼리 확인 후 강제 KILL  (0) 2020.04.17
# 저장 프로시저  (0) 2020.04.07
# 트랜잭션  (0) 2020.04.07

DECLARE @nCnt INT  => 변수선언

SELECT @nCnt  = count(*) FROM [테이블명] WHERE IF_NO = @IN_vIF_NO AND IF_NO_SEQ = @IN_vIF_NO_SEQ

이런식으로 변수를 넣어주면 됨 

'[DB] > [MSSQL]' 카테고리의 다른 글

저장프로시저 실행  (0) 2020.04.30
소계, 합계 구하기  (0) 2020.04.27
# [MSSQL] LOCK 걸린 쿼리 확인 후 강제 KILL  (0) 2020.04.17
# 저장 프로시저  (0) 2020.04.07
# 트랜잭션  (0) 2020.04.07

MSSQL을 사용하다가 조회결과가 나오지 않을 경우 테이블에 락이 걸려서 발생 가능성이 있음

 

1. SP_LOCK 실행 

MODE값이 X인 것(LOCK걸린놈)을 확인 한후 SPID를 확인

 

2. LOCK 걸린 쿼리 조회

DBCC INPUTBUFFER(SPID번호)

 

3. LCOK으로 의심되는 SPID 조회

SELECT p.status ,p.program_name ,p.hostname ,p.spid ,p.blocked ,p.kpid

    ,p.cpu ,p.physical_io ,p.waittype ,p.waittime ,p.lastwaittype

    ,p.waitresource ,p.dbid ,p.uid ,p.memusage ,p.login_time ,p.last_batch

    ,p.ecid ,p.open_tran ,p.sid ,p.hostprocess

    ,p.cmd ,p.nt_domain ,p.nt_username ,p.net_address

    ,p.net_library ,p.loginame ,p.context_info ,p.sql_handle

    ,p.stmt_start ,p.stmt_end

FROM master..sysprocesses p

WHERE (

        STATUS LIKE 'run%'

        OR waittime > 0

        OR blocked <> 0

        OR open_tran <> 0

        OR EXISTS (

            SELECT *

            FROM master..sysprocesses p1

            WHERE p.spid = p1.blocked

                AND p1.spid <> p1.blocked

            )

        )

    AND spid > 50

    AND spid <> @@spid

ORDER BY CASE

        WHEN STATUS LIKE 'run%'

            THEN 0

        ELSE 1

        END

    ,waittime DESC

    ,open_tran DESC

 

4. KILL 죽이기

KILL SPID 번호 -- 죽일번호(LOCK걸린놈)

'[DB] > [MSSQL]' 카테고리의 다른 글

소계, 합계 구하기  (0) 2020.04.27
프로시저 생성시 변수에 데이터 넣기  (0) 2020.04.25
# 저장 프로시저  (0) 2020.04.07
# 트랜잭션  (0) 2020.04.07
@@ROWCOUNT  (0) 2020.03.26

# 저장프로시저 
저장프로시저는 EXECUTE문을 사용해 호출한다.

# 저장프로시저의 장점
 - 캡슐의 이점 : 저장 프로시저 로직이 변경되어도 매개 변수 형태의 변화가 없다면 사용자와 응용프로그램은 영향을 받지 않을 뿐더러, 변경된 로직을 즉시 적용받을수 있다.
 - 성능의 이점 : 저장된 실행계획을 재사용함으로써 CPU를 절약하고,구문분석,이름확인,그리고 최적화에 걸리는 시간을 단축할 수 잇다.
 - 네트워크 트래픽 최소화 : 서버로 전송하는 쿼리문의 문자열을 줄여 네트워크 트래픽을 줄일 수 있다. 상당한 길이의 쿼리문 대신 저장 프로시저 이름과 매개변수만 사용하기 때문이다.
 - 보안계층으로 사용 : 개체에 접근할 권한을 직접 부여하지 않고 저장 프로시저 실행권한만 부여하기 때문에 개체에 대한 불필요한 접근을 제한 할수 있다. 
저장 프로시저가 넘겨주는 값만 볼수 있다. 

 * 일반 SQL 문
 구문분석  - 표준화 - 보안점검 - 최적화  -컴파일 -실행
 (키워드를 분리하고 문법검사) (각 개체들이 이름을 확인하고 불필요한 구문 제거) (구문을 실행한 사용자의 권한을 확인) (가장빠른 성능을 위해 색인,조인,잠금 등을 결정하여 최적화된 실행계획을 만든다.) (실행계획을 컴파일 한 후 캐시에 등록)  (컴파일 된 구문 실행)

 * 저장 프로시저 
 구문분석  - 지연된 이름확인 -보안점검 -결과저장
 (키워드를 분리하고 문법을 검사)   (저장 프로시저를 만들때 해당 개체의 이름이 존쟇는지 확인하지 않는다.)  (저장 프로시저를 만들 수 있는 권한이 있는지 확인한다.) (시스템 테이블에 개체의 정보를 저장)





'[DB] > [MSSQL]' 카테고리의 다른 글

프로시저 생성시 변수에 데이터 넣기  (0) 2020.04.25
# [MSSQL] LOCK 걸린 쿼리 확인 후 강제 KILL  (0) 2020.04.17
# 트랜잭션  (0) 2020.04.07
@@ROWCOUNT  (0) 2020.03.26
테이블 복사 및 데이터 복사  (0) 2020.03.26

# 트랜잭션 
- 명시적 트랜잭션(Explicit Transacions)
 트랜잭션의 시작과 끝을 사용자가 직접 결정하는 트랜잭션 유형을 명시적 트랜잭션 
 BEGIN TRAN -> 데이터변경처리 -> COMMIT TRAN   완료
  -> ROLLBACK TRAN 완료

 * SET XACT_ABORT ON /OFF
 모든 오류로부터 일관성이 유지되는 것은 아니다.
 성공하는 쿼리문과 실해하는 쿼리문이 명시적 트랜잭션안에서 수행하지만 
 성공하는 쿼리문이 나옴 
 따라서 실패시 모든 처리가 취소되게 할 것이라면 SET XACT_ABORT_ON문 실행
 
- 묵시적 트랜잭션(Implicit Transactions)
 데이터변경처리 -> COMMIT TRANS - 완료
    -> ROLLBACK TRANS - 취소
 * SET IMPLICIT_TRANSACTIONS ON  

'[DB] > [MSSQL]' 카테고리의 다른 글

# [MSSQL] LOCK 걸린 쿼리 확인 후 강제 KILL  (0) 2020.04.17
# 저장 프로시저  (0) 2020.04.07
@@ROWCOUNT  (0) 2020.03.26
테이블 복사 및 데이터 복사  (0) 2020.03.26
MSSQL WITH (NOLOCK )  (0) 2020.03.20

쿼리문 실행문 실행 후 영향을 받은 로우의 수 반환

'[DB] > [MSSQL]' 카테고리의 다른 글

# [MSSQL] LOCK 걸린 쿼리 확인 후 강제 KILL  (0) 2020.04.17
# 저장 프로시저  (0) 2020.04.07
# 트랜잭션  (0) 2020.04.07
테이블 복사 및 데이터 복사  (0) 2020.03.26
MSSQL WITH (NOLOCK )  (0) 2020.03.20

-- 테이블을 생성하면서 데이터도 같이 복사 
SELECT * INTO [새로운 테이블 명]
 FROM [기존 테이블명]

'[DB] > [MSSQL]' 카테고리의 다른 글

# [MSSQL] LOCK 걸린 쿼리 확인 후 강제 KILL  (0) 2020.04.17
# 저장 프로시저  (0) 2020.04.07
# 트랜잭션  (0) 2020.04.07
@@ROWCOUNT  (0) 2020.03.26
MSSQL WITH (NOLOCK )  (0) 2020.03.20

MSSQL은 기본적으로 SELECT 시에 공유잠금이 걸린다.

즉, SELECT 문이 수행되는 테이블에 대해서 INSERT,UPDATE,DELETE 문이 수행되고 있다면

SELECT 문은 선행작업이 모두 끝날 때까지 LOCK이 걸린다. 

이때 SELECT문에 WITH(NOLOCK)을 추가하면 선행작업의 결과와 관계없이 바로 

SELECT문이 수행되어서 결과를 반환하게 된다.

SELECT * FROM TABLE WITH(NOLOCK)

 

* 프로시저 내에서 사용되는 SELECT문에서 WITH(NOLOCK)을 사용하기 위해서는 각 문장마다 삽입할 필요없이 

프로시저 시작부분에 

SET TRANSACTION ISOLATION LEVEL READ UNCOMMTTED

'[DB] > [MSSQL]' 카테고리의 다른 글

# [MSSQL] LOCK 걸린 쿼리 확인 후 강제 KILL  (0) 2020.04.17
# 저장 프로시저  (0) 2020.04.07
# 트랜잭션  (0) 2020.04.07
@@ROWCOUNT  (0) 2020.03.26
테이블 복사 및 데이터 복사  (0) 2020.03.26

+ Recent posts