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 5855 게시물 읽기
No. 5855
프로시저 파라미터 질문
작성자
이은택(etaek74)
작성일
2011-03-14 23:46
조회수
6,740

 

<프로시저 test_str>

------------------------------------------------------------------------------------------------------

CREATE PROC [dbo].[test_str]
(
  @PSTR   varchar(50),
  @RESULT    varchar(50) OUTPUT
)
AS

BEGIN
 print
'@PSTR   = '+@PSTR  ;

 select @RESULT = code_id from fim_code where code_id in (@PSTR);
 
 print @RESULT;
 
END

------------------------------------------------------------------------------------------------------

 

 

<프로시저 실행문 및 결과>

------------------------------------------------------------------------------------------------------

declare
 @RESULT varchar(50);


exec dbo.test_str '''001'',''001''',@RESULT;

--> 결과

@PSTR = '001','001'          (<-- 첫번째 print 출력)

                                         (<-- 두번째 print 출력)  : 출력되지 않음

------------------------------------------------------------------------------------------------------

 

 

질문 :  프로시저 내에서 실행될 쿼리는

@PSTR = '001','001'

select code_id from fim_code where code_id in (@PSTR);

select code_id from fim_code where code_id in ('001','001');
 

위와 같이 IN 구분에 여러 문자값을 하나의 파라미터로 전달하여 실행되기를 원합니다.

저렇게 실행되기 위해서는 프로시저 실행시 파라미터를 어떻게 넣어야 정상적으로 실행이 될까요?

exec dbo.test_str '''001'',''001''',@RESULT;

이렇게 넣었을경우 정상적으로 실행이 되지 않습니다.

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

데브피아에 올라와 있는 내용입니다

2008이상은 좀 더 쉽게 할 수 있다는 군요...

drop PROC [dbo].[test_str]
go

CREATE PROC [dbo].[test_str]
(
  @PSTR   varchar(50),
  @RESULT    varchar(50) OUTPUT
)
AS
DECLARE @T TABLE(T_INT INT)
BEGIN
 print '@PSTR   = '+@PSTR  ;
WHILE CHARINDEX(',',@PSTR)<>0
BEGIN
        ----한문자씩 뽑아낸다-->임시테이블에 입력한다.
        INSERT INTO @T(T_INT) VALUES( SUBSTRING(@PSTR,1,CHARINDEX(',',@PSTR)-1) )
        ----빼낸 문자는 뺀 나머지를 새롭게 저장한다.
        SET @PSTR=SUBSTRING(@PSTR,CHARINDEX(',',@PSTR)+1,LEN(@PSTR))       
        IF CHARINDEX(',',@PSTR)=0
        BEGIN
                INSERT INTO @T(T_INT) VALUES( SUBSTRING(@PSTR,1,LEN(@PSTR)) )
        END
        PRINT(@PSTR)
END
 select name from sys.all_objects where object_id in (SELECT T_INT FROM @T);
END
go

declare
 @RESULT varchar(50);
exec dbo.test_str '4,5,7',@RESULT;
 

최성준(junkk)님이 2011-03-15 13:48에 작성한 댓글입니다.

넵, 감사합니다.

이은택(etaek74)님이 2011-03-15 19:11에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
5859경우의수만큼 레코드를 나열하는 방법을 알고 싶어요^^
이만실
2011-03-22
7188
5857[질문]SQL구문 바꾸기? [2]
완전초보
2011-03-17
7204
5856필드명이 아닌 데이터로만 조회 가능할까요? [1]
김태희
2011-03-15
5952
5855프로시저 파라미터 질문 [2]
이은택
2011-03-14
6740
58542개이상중복되는 Row 얻어오는방법이있을까요.. [1]
육식동물
2011-03-14
6728
5852MSSQL2005에서 인덱스를 타지를 않습니다..
김민석
2011-03-08
6709
5850긴급_도와주세요 [1]
홍광표
2011-02-28
6641
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다