[SQL] MsSQL 문법과 동적쿼리

khj·2025년 8월 19일

SQL

목록 보기
1/6

MSSQL 기본 문법

MSSQL(Microsoft SQL Server)은 Microsoft에서 제공하는 관계형 데이터베이스 관리 시스템(RDBMS)입니다.
기본적인 SQL 문법은 다른 DBMS와 유사하지만, MSSQL만의 특징적인 함수나 문법이 있습니다.


기본 문법

-- Database 생성
CREATE DATABASE MyDatabase;

-- Table 생성
CREATE TABLE Member (
    Id INT PRIMARY KEY IDENTITY(1,1),
    Name NVARCHAR(50),
    Age INT,
    CreatedDate DATETIME DEFAULT GETDATE()
);

-- Insert
INSERT INTO Users (Username, Email, Age)
VALUES ('hong', 'hong@example.com', 25);

-- Select
SELECT Id, Name, Age
FROM Member
WHERE Age > 20
ORDER BY CreatedDate DESC;

-- Update
UPDATE Member
SET Age = 30
WHERE Name = '홍길동';

-- Delete
DELETE FROM Member
WHERE Id = 1;

동적 쿼리 (Dynamic SQL)

동적 쿼리(Dynamic SQL)는 쿼리 문자열을 실행 시점에 조합하여 실행하는 방법입니다.
고정된 SQL로 처리하기 어려운 조건이나 테이블, 컬럼을 동적으로 지정할 때 사용합니다.

1. 변수 선언과 동적 쿼리 실행

-- 변수 @sql 선언 (NVARCHAR 타입)
DECLARE @sql NVARCHAR(MAX);

-- @sql에 문자열 할당
SET @sql = 'SELECT * FROM Member WHERE Age > 25';

-- @sql에 저장된 문자열을 출력
PRINT @sql

-- @sql 쿼리를 실행
EXEC(@sql);

2. 파라미터 바인딩

sp_executesql을 사용하면 파라미터 바인딩이 가능하여 보안적 측면에서 더 안전합니다.

DECLARE @sql NVARCHAR(MAX);
DECLARE @age INT = 25;

SET @sql = N'SELECT * FROM Member WHERE Age > @age';

-- @age 파라미터를 바인딩하면서 @sql 쿼리를 실행
EXEC sp_executesql @sql, N'@age INT', @age;

3. Table/Column 을 동적으로 지정

DECLARE @tableName NVARCHAR(50) = 'Member';
DECLARE @sql NVARCHAR(MAX);

-- @sql 쿼리에 @tableName을 할당
SET @sql = 'SELECT * FROM ' + @tableName;
EXEC(@sql);

동적 쿼리 사용 시 주의사항

SQL Injection 위험

  • 문자열을 직접 연결하면 보안 취약점이 발생할 수 있습니다.
  • 반드시 sp_executesql과 파라미터 바인딩을 사용하는 것이 권장됩니다.

쿼리 최적화 어려움

  • 실행 계획 캐싱이 잘 되지 않아 성능이 떨어질 수 있습니다.
  • 가능하다면 동적 쿼리 대신 조건 분기(IF, CASE 등)를 활용하는 것이 좋습니다.

복잡성 증가

  • 쿼리 문자열을 조립하는 과정에서 가독성이 떨어질 수 있으므로 관리에 주의해야 합니다.
profile
Spring, Django 개발 블로그

0개의 댓글