IT/MS-SQL
내부 프로시저 실행시킬 때 EXECUTE 주의점
withoutWings
2011. 2. 28. 21:27
프로시저 내부에서 다음과 같은 형식으로 실행을 시키면 에러가 나고 실행이 안되게 된다.
DECLARE @PROC NVARCHAR(MAX)
set @t_str = REPLACE(@t_str,'''','''''')
Set @PROC = N'EXEC ['+@vLinkedServerName+'].['+@TDatabaseName+'].dbo.up_DW2_SM_SpecialDeploy
'''+@ObjectName+''', '''+@t_str+''', '''+@ObjectType+''''
EXEC @PROC <== 이 부분이 문제
<Solution>
내부 프로시저를 실행시킬 때 위 부분을 EXEC (@PROC) 로 실행하면 된다.
<WHY>
EXECUTE를 실행할 때 다음과 같이 실행문을 실행할 때는 괄호를 붙이지 않는다.
SET @PROC = 'up_DW2_DPM_SendMailDeployResult_02 @SInstanceName, @SDatabaseName, @ObjectName'
EXEC @PROC
하지만 위와 같이 동적쿼리를 사용하든가 하는 경우에는 스트링이 넘어가기 때문에 EXEC (@PROC)와 같이 괄호를 붙여서 실행해야 에러가 나지 않는다.