Ms-sql 동적쿼리 질문 0 4 1,034

by 아이스베어 [SQL Query] MS-SQL Qurey 동적 쿼리 [2021.07.27 13:27:01]


특정 파티션 값을 조회하여 해당 파티션 정보로 테이블에 대한 쿼리를 만들려고 하고있습니다.

아래와 같이 쿼리를 작성 하였는데, 쿼리 동작이 안되네요 오류메시지는 아래처럼 나옵니다.

PartitionID 정보가 Int라 Convert로 변경하였습니다.

혹시 조치할 부분이 뭐가 있을까요.. 감이 안잡히네요..

 

오류정보

Must declare the table variable "@tblName".

쿼리내용

DECLARE @Partitionnnm NCHAR(10) =
(SELECT  Convert(NCHAR(10),PartitionID) AS qname
FROM    [SolarWindsOrionLog].[dbo].[OrionLog_LogEntry]
WHERE MessageDateTime >= DATEADD(MI,-560,GETDATE())
AND     MessageDateTime < DATEADD(MI,-540,GETDATE())
Group by partitionid
)
DECLARE @tblName NCHAR(50) = N'OrionLog_LogEntryMessage_' + @Partitionnnm
DECLARE @query NVARCHAR(4000)
SET @query = N'SELECT * from @tblName';

EXEC sp_executesql  @query

by 마농 [2021.07.27 13:56:42]

- 변경전 : SET @query = N'SELECT * from @tblName';
- 변경후 : SET @query = N'SELECT * from ' + @tblName;
 


by 아이스베어 [2021.07.27 14:09:29]

와.. 간단한 방법이였네요... 머가 문제인지 몰라서 계속 삽질만 했었는데 감사합니다.


by 축구쟁이 [2021.07.27 17:38:44]

빈번하게 호출되는 동적 쿼리의 경우에는 sp_executesql를 통해 실행할때 파라미터를 설정하는 것이 좋습니다.

DECLARE @tblName NCHAR(50) = N'OrionLog_LogEntryMessage_' + @Partitionnnm
DECLARE @query NVARCHAR(4000)
DECLARE @param NVARCHAR(1000)

SET @query = N'SELECT * FROM @p_tblName';

SET @param = N'@p_tblName NCHAR(50)'

EXEC sp_executesql  
@query
, @param
, @tblName


by 마농 [2021.07.29 13:07:03]

변수 처리는 값에 대해서만 해야 합니다.
테이블명, 컬럼명, 명령어 등은 변수처리가 안됩니다.
MSSQL 에서는 가능한 걸까요?
오라클에서는 확실히 안됩니다.
SELECT * FROM t WHERE col1 = :v1;  -- 정상(값에 대한 바인딩)
SELECT * FROM :v_table;  -- 오류(테이블명 바인딩)

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입