https://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
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 같은 경우에는 트랜잭션이 실행은 되었지만 커밋되지 않은 데이터도 읽겠다는 뜻이다.
이렇게 될 경우 정합성의 문제가 발생하거나 더티 리드 현상이 발생하게 될 수도 있다.
'Database' 카테고리의 다른 글
MySQL의 GROUP_CONCAT 함수: 여러 값을 하나의 문자열로 결합하기 (0) | 2024.08.23 |
---|---|
기존 테이블에 속성 추가 (0) | 2021.11.11 |
동적 피벗 테이블 (0) | 2021.01.27 |
mssql - join, between, like '%' (0) | 2021.01.18 |