https://coding-factory.tistory.com/

 

코딩팩토리

My life depends on my efforts

coding-factory.tistory.com

위 사이트 참조

 

ISNULL

- ISNULL은 반환 값이 NULL일 경우 설정된 값을 대신 반환하는 함수이다.

- ISNULL(칼럼, 칼럼이 NULL일 경우 대체할 값)

EX ) ISNULL(WSL.ORDERQTY, 0) - ISNULL(WSL.SHIPQTY, 0) AS NOTSHIPQTY

ISNULL을 사용하면 정의에서도 알 수 있드시 NULL값이 없어지게 된다.

 

IN

SELECT * FROM My_Table WHERE Age IN(20,24,26)

SELECT * FROM My_Table WHERE Age = 20 OR Age = 24 OR Age = 26

반대로 어떤 값에 해당사항이 없는 값을 불러오고 싶을 때는 NOT IN을 사용하면 된다.

 

참조하면 좋은 사이트

https://greatepig.tistory.com/19

 

[DB]프로시저 vs 사용자 정의 함수

<서론> 프로시저에 비즈니스 로직이 녹아있는 프로젝트를 하다보니 여러 프로시저 안에서 다른 프로시저를 부르는 경우를 많이 봤다. 그런데 간혹 프로시저 말고, 사용자 정의 함수를 호출하는

greatepig.tistory.com

PROCEDURE

프로지셔란 프로그래머가 생성해놓은 쿼리문을 마치 하나의 메서드 형식으로 관리된다.

 

기본적인 프로시져 형태 

CREATE PROCEDURE [프로시져명]
(
	@변수명 변수타입,
	@변수명 변수타입,
)
AS
BEGIN
SET NOCOUNT ON
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

쿼리문

END;

변수명 앞에는 @을 사용해야 한다.

 

특징(사용자 정의 함수와 반대되는)

- 트랜잭션을 사용할 수 있다.

- SELECT, HAVING, WHERE 위에서 사용할 수 없다.

 

그 외 프로시져에서 자주 등장하는 구문

- SET NOCOUNT ON

  MSSQL에서 INSERT, UPDATE, 등을 사용하게 되면 영향받은 쿼리의 개수를 세어주는 기능이 있는데 이 기능은 딱히 의미 없는 기능이기 때문에 성능이 중요한 프로시져의 경우 SET NOCOUNT ON을 사용하여서 세어주는 기능을 사용하지 않을 수 있다.

 

- SET TRANSACTION ISOLATION LEVEL READ UNCOMMITEED

ISOLATION LEVEL은 격리 수준으로 현재 READ UNCOMMITED을 사용하고 있다.

격리 수준은 4가지가 있고 아래로 갈수록 격리 수준이 강해진다.

 

- READ UNCOMMITTED

- READ COMMITTED

- REPEATABLE READ

- SERIALIZABLE

 

여기서 READ UNCOMMITTED 같은 경우에는 트랜잭션이 실행은 되었지만 커밋되지 않은 데이터도 읽겠다는 뜻이다.

이렇게 될 경우 정합성의 문제가 발생하거나 더티 리드 현상이 발생하게 될 수도 있다.

 

 

 

 

 

 

 

+ Recent posts