반응형
BEGIN
DECLARE @result INT;
DECLARE @num1 INT = 100;
DECLARE @num2 INT = 200;
DECLARE @sql_query NVARCHAR(MAX);
DECLARE @param NVARCHAR(MAX);
SET @sql_query = N'SELECT @temp_result = ' + convert(varchar, @num1) + ' + ' + convert(varchar, @num2);
SET @param = N'@temp_result FLOAT OUTPUT';
EXEC sp_executesql @sql_query, @param, @temp_result = @result OUTPUT;
END
주의할 점
1. sp_executesql은 VARCHAR가 아닌 NVARCHAR를 요구한다.
2. EXEC sp_executesql 부분에서 @sql_query 쿼리를 실행하여 리턴 값을 @result에 넣어야 한다.
그런데 @temp_result = @result OUTPUT; 은 @temp_result 변수에다가 @result의 값을 대입하는 것처럼 보인다.
sp_executesql에서는 위의 코드를 @result 변수에 @sql_query를 실행하여 얻은 리턴 값인 @temp_result를 대입한다라고 해석해야 한다.
참고
https://itteamb.blogspot.com/2020/03/mssql-exec-exec-spexecutesql.html
반응형
'Programming > 데이터베이스' 카테고리의 다른 글
[MySQL] 제약조건을 무시하고 FOREIGN KEY 삭제하기 (0) | 2021.05.13 |
---|---|
[오라클 데이터베이스] 아우터 조인(OUTER JOIN)이란? (0) | 2020.12.12 |
[오라클 데이터베이스] 이너 조인(INNER JOIN)이란? (ANSI) (0) | 2020.08.12 |
[오라클 데이터베이스] ROW_NUMBER()을 통해 ROWNUM을 추출해보자(Feat. 서브쿼리, 윈도우 함수, 순위 함수) (0) | 2020.08.12 |
[오라클 데이터베이스] - 트랜잭션 처리를 위한 COMMIT과 ROLLBACK (0) | 2019.10.30 |