database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 4605 게시물 읽기
No. 4605
동적쿼리에서 스칼라 변수 에러
작성자
작성일
2009-01-15 15:32
조회수
13,092

안녕하세요.
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는 분명 윗단에서 선언을 했는데도 선언을 하라고 합니다.
동적쿼리에서는 @변수는 사용할 수가 없는건지 궁금합니다.


혹시 이와 비슷한 경험 있으신분 도움 부탁드립니다.

이 글에 대한 댓글이 총 1건 있습니다.

[자답]
DECLARE @strQry nvarchar(128),
               @param nvarchar(128)
  
SET @strQry = 'DELETE FROM ' +@table_name+ ' WHERE ' +@code_field_name+ '=@p_code_field_value' //<--중요 요놈을 아래 param에서 선언한 변수로 해줘야 합니다.
SET @param = '@p_code_field_value char(1)

                                    ▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼    
EXXCUTE sp_executesql @strSql, @param, @p_code_field_value = @code_field_value

param에 넣어서 그놈을 떙기니 되네요.

혹시 저처럼 헤메는 분 계실까봐 남겨둡니다.

ps 근데 본문 제가 썻는데 왜 사용자 이름이 안나오지요?

Sway(swaylife)님이 2009-01-16 09:40에 작성한 댓글입니다.
이 댓글은 2009-01-16 09:41에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
4608임시저장 문제 [1]
이상록
2009-01-16
5643
4607sql검색조건 무엇이 틀리는지 ? [2]
이가루
2009-01-16
5754
4606ㄱ버튼을 누르면 ㄱ으로 시작하는 목록이 뜨게하는 쿼리는 어떻게 만드나요? [3]
박수영
2009-01-16
7345
4605동적쿼리에서 스칼라 변수 에러 [1]
2009-01-15
13092
4603사용하지 않는 인덱스를 조회하는 방법이 있나요? [2]
방석호
2009-01-14
6977
4602고수님들 부탁 드릴께요 속도가 너무느림니다 [1]
길동이김
2009-01-14
5695
4599테이블중에 몇개는 건너뛰고 10개 정도만 골라오려고 하는데... [1]
김무현
2009-01-14
5376
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.021초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다