반응형
특징
- oracle과 다르게 mssql은 ''을 null로 처리하지 않는다.
- boolean 형이 존재하지 않는다. bit로 0, 1 처리
SSMS (SQL Server Management Studio)
- 쿼리 편집창에 접속정보가 없으면 현재 연결가능한 정보로 접속함.
- SSMS 단축키
- tab to space 셋업
- 로컬캐시새로고침 : Ctrl + Shift + R
- 쿼리 실행 : ctrl + enter (설정)
- T-SQL : ctrl + shift + f(설치, 설정)
- 줄삭제 : ctrl + D (설정)
- 쿼리바로가기(프로시저 단축키)
- ctrl + 3 : sp_help(설정)
- 오토커밋 해제 : SET IMPLICIT_TRANSACTIONS
- 주석셋 : ctrl + /
- 주석해제 : alt + /
- 탭이동 : ctrl + alt + 방향키
ADMIN
- 오라클과 달리 Object 관리를 프로시저를 제공한다.
- sp_who
- sp_lock
- sp_help
- sys 계정을 통해서 DB 시스템 관리가 가능하다.
프로시저내 검색
SELECT OBJECT_NAME(object_id)
, OBJECT_DEFINITION(object_id)
FROM sys.procedures
WHERE OBJECT_DEFINITION(object_id) LIKE '%찾을 내용%'
메일서버
- msdb는 외부 메일 서버로 메일을 발송하는 프로세스를 제공한다.
DDL
DML
Group by 문자열 합치기
SELECT USERID
, STUFF (( SELECT ',' + HOBBY
FROM dbo.HOBBY_TBL
WHERE USERID = A.USERID
FOR XML PATH('')
), 1, 1, '') AS HOBBY
FROM dbo.HOBBY_TBL AS A
GROUP BY USERID
count(case when 조건 then 1 end)
특정 조건에 해당하는 컬럼만을 카운트한다.
- 속도가 너무 느리다.....
with(nolock)
select 시 insert, update, delete 작업이 있으면 x-lock 걸려 데이터를 읽을 수 없다. 하지만 with(nolock)을 하면 읽을 수 있게 한다. READ UNCOMMITTED랑 같은 의미.
SELECT *
FROM TB_COMM_CODE_M WITH (NOLOCK);
콘솔로그
PRINT 'TEST'
iif
select iif(1=1, 1, 2) // 1출력
가상테이블
@tbl TABLE( NAME NVARCHAR(100),
PHONE NVARCAHR(100));
부분 출력
숫자 만큼 row를 출력한다.
select top 1
from tb_comm_type_m;
트리
WITH WH AS
(
SELECT
A.FOLDER_ID
, A.NAME
, A.PARENT_ID
, A.ITEM_INDEX
, CONVERT(NVARCHAR(1000), '/' + CONCAT(A.ITEM_INDEX, A.NAME) ) AS SORT
FROM FOLDERS A
WHERE A.FOLDER_ID = #{value}
UNION ALL
SELECT
B.FOLDER_ID
, B.NAME
, B.PARENT_ID
, B.ITEM_INDEX
, CONVERT(NVARCHAR(1000), WH.SORT + '/' + CONCAT(B.ITEM_INDEX, B.NAME) ) AS SORT
FROM FOLDERS B
, WH
WHERE B.FOLDER_ID = #{value}
AND WH.FOLDER_ID = B.PARENT_ID
)
SELECT WH.*
FROM WH
ORDER BY WH.SORT
ROW_NUMBER, PARTITION BY
SELECT ROW_NUMBER() OVER(PARTITION BY EMP_NO ORDER BY EMP_NO)
FROM EMP
ROW_NUMBER() OVER은 PARTITION BY 와 함께 사용된다.
PARTITION BY 는 분할을 함. 그룹핑과는 다름.
ROW_NUMBER는 숫자를 매김.
예외처리
BEGIN TRY
EXECUTE SP\_Nothing; // SP\_Nothing 는 없는 프로시저 이다.
EBD TRY
BEGIN CATCH
SELECT
@@Error as Error ,
Error\_Number() as Number,
Error\_Line() as Line,
Error\_Message() as \[Message\],
Error\_Procedure() as \[Procedure\],
Error\_Severity() as severity,
Error\_State() as state
END CATCH
TRANSACITON
BEGIN TRAN--트랜잭션 시작
ROLLBACK TRAN --트랜잭션 이전상태로 ROLL BACK
COMMIT TRAN --트랜잭션 완료
반응형