안녕하세요.
MS-SQL을 접한지가 오래되지 않아서 많이 헤매고 있습니다.
5개의 테이블이 각기 3개의 필드를 가지고 있습니다.
그래서 각각의 테이블마다 SAVE,DELETE를 따로 구현하기 보담은 동적쿼리를 써서 테이블,필드변수를 이용해서 처리할려고 하는데
문제가 생깁니다.
ALTER PROCEDURE [dbo].[AreaMaster_Form_Test]
--쿼리분기문
@SP_DBMODE_SELECT char(1) = 0,
@SP_DBMODE_SAVE char(1) = 1,
@SP_DBMODE_DELETE char(1) = 2,
--탭분기문
@SP_TAB_ONE char(1) = 0,
--여기까지 상수선언 ########################################
--여기부터 변수선언 ########################################
@tabstate char(1) = null,--tab index값
@dbmode char(1) = null,--SELECT,SAVE,DELETE중 하나
@code_field_value char(1) = null,--MST_code값
@name_field_value varchar(30) = null,--MST_name값
@bigo_field_value varchar(100) = null, --MST_bigo
--내부변수
@table_name varchar(100) = null,
@code_field_name varchar(100) = null,
@name_field_name varchar(100) = null,
@bigo_field_name varchar(100) = null,
@global_value int = 0
--여기까지 변수선언 ########################################
AS
--여기부터 변수 초기화########################################
SELECT
@tabState = isnull(ltrim(rtrim(@tabState)),'0'),
@dbmode = isnull(ltrim(rtrim(@dbmode)),'0')
--여기까지 변수 초기화########################################
--여기부터 STATE 분기문 ######################################
---여기부터 값셋팅 부분
IF @tabstate = @SP_TAB_ONE
BEGIN
SET @table_name = 'n_mst'
SET @code_field_name = 'zon_code'
SET @name_field_name = 'zon_name'
SET @bigo_field_name = 'zon_bigo'
END
---여기까지 값셋팅 부분
IF @dbmode = @SP_DBMODE_SELECT GOTO SELECT_PROC
ELSE IF @dbmode = @SP_DBMODE_SAVE GOTO SAVE_PROC
ELSE IF @dbmode = @SP_DBMODE_DELETE GOTO DELETE_PROC
--여기까지 STATE 분기문 #######################################
--
--여기부터 스토어프로시저 #####################################
DELETE_PROC:
exec ('DELETE FROM ' +@table_name+ ' WHERE ' +@code_field_name+ '=@code_field_value')//에러
exec ('DELETE FROM ' +@table_name+ ' WHERE ' +@code_field_name+ '=' +@code_field_value//에러
RETURN
DELETE_PROC 부분을 호출하는데 에러가 납니다.
프로시저 안에서 동적쿼리를 호출하는데
삭제를 할려고 아래 코드를 입력하면
exec AreaMaster_Form_Test @tabstate=0, @dbmode =2, @code_field_value=A
스칼라 변수 "@code_field_value"을(를) 선언해야 합니다.
DELETE FROM n_mst WHERE zon_code= A
이런 에러를 냅니다. 아래쪽은 프린트문을 찍은거라 만들어지는 쿼리문 자체는 별 문제 없는거 같은데.
@code_field_value는 분명 윗단에서 선언을 했는데도 선언을 하라고 합니다.
동적쿼리에서는 @변수는 사용할 수가 없는건지 궁금합니다.
혹시 이와 비슷한 경험 있으신분 도움 부탁드립니다.
|