-
동적 SQL, EXEC() 와 sp_executesql데이터베이스와 SQL 2023. 1. 7. 10:51
문자열로 구서왼 동적 쿼리가 필요할 경우, 기본적으로 sp_executesql을 사용한다.
EXEC() 보다 상대적으로 보안이 안전한 편이며 컴파일 부하가 적다.
한번 컴파일 하면, Caching된 것을 사용하기 때문에 Cache의 재사용 효율이 좋다.
또한 출력 매개변수 지원을 지원한다.
EXEC()는 순수 동적 쿼리로, Query Optimizer에 의해 자동 매개변수화 쿼리로 변환이 가능하다.
EXEC()
DECLARE @TableName varchar(128) = 'Orders', OrderID int = 10248; DECLARE @sql varchar(8000), @sql2 varchar(max); SET @sql = 'SELECT OrderID, OrderDate' + ' FROM ' + 'dbo' + '.' + QUOTENAME(@TableName) + ' WHERE OrderId = ' + CAST(@OrderID As varchar(10)); PRINT @sql; EXEC (@sql);
sp_executesql
DECLARE @pCustID varchar(128) = 'VINET', OrderID int = 10212; DECLARE @sql nvarchar(4000), @CR varchar(1) = CHAR(13), @QM varchar(1) = CHAR(39); SET @sql = 'SELECT OrderID, OrderDate' + @CR + ' FROM dbo.Orders' + @CR + ' WHERE CustomerID = @CustomerID' + @CR + ' AND OrderID <= @OrderID'; PRINT @sql; EXEC sys.sp_executesql @statment = @sql, @params = N'@CustomerID nvarchar(10), @OrderId int', @CustomerID = @pCustId, @OrderID = @pOrderID GO
반응형'데이터베이스와 SQL' 카테고리의 다른 글
[데이터베이스] SQL 집합 연산자 (intersect, union, except) (1) 2023.01.23 [데이터베이스] MSSQL 조인 방법, inner join과 outer join 차이 (0) 2023.01.23 [데이터 베이스] MSSQL 임시테이블과 테이블 변수 (0) 2023.01.07 [데이터 베이스] MSSQL SEQUENCE (시퀀스) 개체 생성 및 사용 (1) 2022.12.17 [데이터베이스] MSSQL 다양한 DML 활용하기, 변수와 임시 테이블 (0) 2022.11.11