DB/MSSQL
[MSSQL] DECLARE (변수선언) / use 구문 / EXEC 와 동적 쿼리
codingD
2019. 12. 27. 14:51
참고 : https://stophyun.tistory.com/62
1. DECLARE (변수선언)
- 변수 : 값을 담아두는 것, 값 뿐만 아니라 여러 행으로 떨어지는 결과를 담을 수 있어서 '테이블 변수'도 가능
- 프로그래밍 언어에서처럼 변수를 선언하고 사용가능
- 프로시저와 함께 유용하게 쓰임
변수 선언 : DECLARE @variable_name data_type
변수에 값 대입 : SET @variable_name = value
변수의 값 출력 : SELECT @variable_name
ex) var1 이라는 이름의 int형 변수를 선언해서 50이라는 값을 대입하고 출력
DECLARE @var1 INT
SET @var1 = 50
SELECT @var1
- data_type이 table 형식이 경우
DECLARE @variable_name TABLE
(
column_name data_type,
column_name data_type,
.....
)
--테이블 변수 생성, 자료형 대신 테이블 스키마가 들어감
DECLARE @userData TABLE (
name varchar(30) NOT NULL,
CreateDate datetime NOT NULL
);
-- insert into select 문을 이용하여 k 로 시작하는 회원의 리스트를 할당해보자
INSERT INTO @userData
SELECT name, CreateDate
FROM tblPerson
WHERE name like 'k%'
--할당 후에는 변수를 이용하여 테이블처럼 사용가능
SELECT * FROM @userData
2. use 구문
- 현재 사용하는 데이터베이스를 지정 또는 변경하는 구문
use 데이터베이스_이름
ex) use AdventureWorks
- 이렇게 지정해 놓은 후에는 특별히 다시 use 문을 사용하거나, 특정 DB를 사용하겠다고 명시하지 않는 이상 모든 SQL문은 AdventureWorks에서 수행
- 즉, "지금부터 AdventureWorks를 사용하겠으니, 모든 쿼리는 AdventureWorks 데이터베이스에서 수행하라"
3. EXEC와 동적 (adhoc)쿼리
- 참고 : http://egloos.zum.com/sweeper/v/3002591
- EXEC : EXEC문은 SQL문을 실행시키는 역할 = EXECUTE
- 다음 두 예제는 차례로 저장프로시저와 문자열 쿼리를 EXEC로 실행하는 내용
- 이 같이 EXEC문을 사용하여, 쿼리문 내에서 다른 쿼리문을 실행시킬 수 있다
- 이렇게 EXEC()를 이용해서 쿼리문을 실행하는 것을 '동적쿼리' 라고 한다
--#1. 저장 프로시저 호출 예제
USE AdventureWorks2019
GO
-- uspGetExployeeManagers 라는 저장프로시저에 인자 6을 넘기며 실행
-- usp (user stored procedure)
EXEC dbo.uspGetEmplyeeManagers 6
GO
--#2. 직접 문자열 쿼리 실행 예제
USE Son
GO
DECLARE @SQLStmt VARCHAR(80) =
'SELECT * FROM UserTable WHERE ID = ''LHJ'''
EXEC(@SQLStmt)