SQL Server 저장 프로시저(Stored Procedure) 정리 데이터베이스 작업을 하다 보면 반복적인 SQL을 실행해야 하는 경우가 많습니다. 이럴 때 저장 프로시저를 사용하면 코드 재사용성과 성능, 보안 측면에서 많은 이점을 얻을 수 있습니다.저장 프로시저의 장점한 번의 호출로 여러 SQL 작업을 수행할 수 있음실행 계획이 재사용되어 속도 향상직접 테이블 접근을 제한하여 보안 강화복잡한 로직을 DB 내부에 캡슐화 가능기본 생성 문법 CREATE PROCEDURE SP이름( @입력변수1 자료형, @입력변수2 자료형, @출력변수1 자료형 OUTPUT, @출력변수2 자료형 OUTPUT)ASBEGIN -- SQL 로직 작성 RETURN 코드값ENDOUTPUT 키워드를 ..
SQL Server에서 TRY...CATCH를 활용한 오류 처리 예제데이터베이스 작업을 하다 보면 예상치 못한 오류가 발생할 수 있습니다. 이럴 때 SQL Server에서는 TRY...CATCH 구문을 사용하여 오류를 감지하고 적절한 처리를 할 수 있습니다.아래 예제는 의도적으로 오류를 발생시킨 뒤, CATCH 블록에서 오류 정보를 확인하는 코드입니다. BEGIN TRY -- 의도적으로 오류 발생 (수량 컬럼에 문자 입력) INSERT INTO #임시1 (코드, 수량) VALUES ('A', '30A') -- 정상적으로 실행되었을 경우 SELECT 결과 = '성공처리'END TRYBEGIN CATCH -- 오류 발생 시 실행되는 영역 SELECT 결과 ..
1. 커서(Cursor)가 필요한 경우일반적으로 SQL은 한 번에 여러 행을 set 기반으로 처리하는 게 가장 빠르고 효율적이다.하지만 아래 같은 상황에서는 어쩔 수 없이 “한 행씩” 처리해야 할 때가 있다.행마다 복잡한 절차(여러 단계 UPDATE/INSERT, 조건 분기)를 거쳐야 할 때특정 순서(정렬 기준)에 따라 하나씩 처리하면서 중간 상태를 보고 결정해야 할 때트랜잭션을 세밀하게 나누고 싶을 때 (한 행 단위로 처리/롤백 등)이럴 때 사용하는 기능이 커서(Cursor)다.커서는 SELECT 결과로 나온 레코드셋을 대상으로, 한 행씩 순차적으로 읽어가며 처리할 수 있게 해준다.2. 커서 기본 구조커서는 대략 아래 순서로 사용한다.커서에 사용할 SELECT 정의 (DECLARE CURSOR)커서 열..
1. WHILE 기본 반복문 예제SQL Server에서 반복이 필요할 때는 WHILE로 간단하게 처리할 수 있다.아래 예제는 1부터 10까지 더하면서 누적 합계를 구하는 가장 기본적인 패턴이다. -- 기본 WHILE 반복문 예제DECLARE @반복값 INT, @누적값 INT;SET @반복값 = 0;SET @누적값 = 0;WHILE (@반복값 @반복값은 0에서 시작해서, WHILE 안에서 1씩 증가.@누적값은 증가된 @반복값을 계속 더해서 누적.최종적으로는 반복값결과 = 10, 누적값결과 = 55가 나온다. (1+2+…+10)이 패턴은 나중에 숫자 누적뿐만 아니라, 특정 카운트만큼 처리 반복할 때 기본 틀로 써먹기 좋다.2. BREAK 사용 예제 (조건 만족 시 반복 중단)가끔은 “범위 끝까지 돌 필요 ..
SQL Server는 다양한 프로그래밍 기능을 제공하여 데이터 처리를 효율적으로 수행할 수 있도록 지원한다.특히 반복 작업 자동화, 비즈니스 로직 처리, 데이터 무결성 유지 등에 활용된다.SQL Server의 주요 프로그래밍 요소는 다음과 같다.저장 프로시저 (Stored Procedure, SP)함수 (Function, FN)데이터베이스 트리거 (Trigger)어셈블리 (Assembly)사용자 정의 형식 (User-Defined Type)규칙 (Rule)기본값 (Default)시퀀스 (Sequence)자주 사용되는 기능실무에서 가장 많이 활용되는 핵심 기능들이다.저장 프로시저 (SP) : 비즈니스 로직 처리, 배치 작업, 트랜잭션 제어함수 (FN) : 재사용 가능한 계산 로직 정의 (특히 스칼라/테이블..
/* ================================ 1. IIF (간단 조건문)================================ */-- @A 10 → 2-- 그 외 → 3DECLARE @A INT = 10SELECT 결과 = CASE WHEN @A 10 THEN 2 ELSE 3 END/* ================================ 3. CASE (ELSE 생략)================================ */-- @A 10 → 2-- 그 외 → NULLDECLARE @A INT = 10SELECT 결과 = CASE WHEN @A 10 THEN 2 END/*ELSE 생략 시 조..
정리CONVERT() : 형변환 (스타일 지정 가능)CAST() : 기본 형변환FORMAT() : 숫자/날짜 포맷팅 (단, 성능은 상대적으로 느림)RIGHT() + CONCAT() : 빠른 자리수 맞추기 (실무에서 자주 사용)/* ================================ 1. 숫자 → 문자 변환================================ */SELECT CONVERT(NVARCHAR, 123) -- '123'SELECT CAST(123 AS NVARCHAR) -- '123'/* ================================ 2. 문자 → 날짜/시간 변환================================ */SELECT CO..
/* ================================ 1. 현재 날짜 / 시간 조회================================ */-- 현재 날짜 (YYYYMMDD)SELECT CONVERT(NVARCHAR, GETDATE(), 112)-- 현재 날짜 + 시간 (YYYY-MM-DD HH:MI:SS)SELECT CONVERT(NVARCHAR, GETDATE(), 121)/* ================================ 2. 날짜 / 시간 계산================================ */-- 특정일 기준 10일 전SELECT DATEADD(DAY, -10, CONVERT(DATE, '20200610'))-- 특정 시간 기준 10분 전SELECT..
/* 문자열 함수 / 형식 체크 함수 정리 *//* 왼쪽부터 문자를 3자리 자름 */SELECT LEFT('12345', 3); -- 123/* 오른쪽부터 문자를 3자리 자름 */SELECT RIGHT('12345', 3); -- 345/* 왼쪽 2번째 위치부터 3글자 자름 */SELECT SUBSTRING('12345', 2, 3); -- 234/* 'ABC'를 역순으로 표시 */SELECT REVERSE('ABC'); -- CBA/* 'ABC'를 두 번 반복 표시 */SELECT REPLICATE('ABC', 2); -- ABCABC/* 'ABC' 가 있는 위치 찾기 */SELECT CHARINDEX('ABC', 'KKK..
