강의 컨설팅 트레이닝 무료진단 무료책자 마케팅편지 마케팅정보공유 다이어리 서비스제휴 고객센터

검색 in 부분에대한 프로시져 처리법
작성자 : 13 김영철
등록날짜 : 2009.01.23 00:05
2,142

프로시저 관련 질문 Help me~~~  
<PRE style="BACKGROUND-COLOR: white">OS : Microsoft Windows XP ProfessionalSQL : Microsoft SQL Server 2005고수님들 도와주십시오. ㅜ.ㅜ몇일을 걸쳐 프로시져를 만들어서 프로그래밍을 완성해가는데 마지막에 걸렸네요.질문은 다음과 같습니다.예를들어 아래와 같은 프로시져가 있다면Select user_nameFrom UserInfoWhere USER_NO in ( @row_num)프로그램에서 @row_num 값을 12,13,14,15 이런식으로 프로시져에 넘겨줍니다.그런데 프로시져는 where user_no in (12, 13, 14, 15) 로 인식하는 것이 아니라where user_no in (변수)로 12, 13, 14, 15를 통째로 하나의 변수로 인식합니다.그래서 제대로 된 값을 얻을 수가 없습니다. 이럴때는 어떻게 해야하는지 ㅡ.ㅡ;; 혹시 SQL에서 12, 13, 14, 15 각각을 조회 조건으로 받을 수 있는 방법이 없을까요?? 프로그램을 수정하지 않는 방법은 없을까요?? 머리털 다 빠지겠습니다. Help Help~~~ </PRE>
re: MSSQL 프로시저 관련 질문 Help me~~~
wonkim3000 (2006-12-21 09:31 작성)
신고|이의제기
질문자 평
쿼리가 길어서 동적으로 만드는건 조금 위험할 것 같고 함수만들어서 사용하면 아주 좋네요. 감사^^
제가 아는 방법으론 두가지 방법으로 해결 가능할거 같습니다...
 
1. 동적 SQL 이용
    declare @strsql varchar(1000)
    set @strsql = 'Select user_name'
    set @strsql = @strsql + 'From UserInfo'
    set @strsql = @strsql + 'Where USER_NO in ( ' + @row_num + ')'
 
    exec(@strsql )
 
2. 사용자 함수 처리
CREATE FUNCTION f_GetArrayTable(
    @vcList      varchar(8000),
    @vcDelimiter varchar(2))
RETURNS @Arrary TABLE (IndexNo int identity, Value varchar(300))
BEGIN
    declare @iPosStart int,
            @iPosEnd   int,
            @iLenDelim tinyint,
            @iExit     tinyint,
            @vcStr     varchar(300)
    SET @iPosStart = 1
    SET @iPosEnd = 1
    SET @iLenDelim = LEN(@vcDelimiter)
    SET @iExit = 0
    WHILE @iExit = 0
    BEGIN
        SET @iPosEnd = CHARINDEX(@vcDelimiter, @vcList, @iPosStart)
        IF @iPosEnd <= 0
        BEGIN
            SET @iPosEnd = LEN(@vcList) + 1
            SET @iExit = 1
        END
        SET @vcStr = SUBSTRING(@vcList, @iPosStart, @iPosEnd - @iPosStart)
        INSERT INTO @Arrary (Value) VALUES (@vcStr)
        SET @iPosStart = @iPosEnd + @iLenDelim
    END
    RETURN
END

사용자 함수를 만든다.
 
Select user_name
From UserInfo
Where USER_NO in ( select Value from dbo.f_GetArrayTable(@row_num, ','))
 
참고
select * from dbo.f_GetArrayTable('12,13,14,15', ',')
 
Value 를 구분자로 분리하여 행으로 만드는 사용자 함수 입니다...
 
 

re: MSSQL 프로시저 관련 질문 Help me~~~
sungary2 (2006-12-21 09:30 작성)
신고|이의제기
아마도 따옴표 때문에 그런거 같은데..
 
 
프로시저 구문 상의 다음과 같이 수정하시면 될듯합니다..
 
SET @v_strSQL = 'Select user_name From UserInfoWhere USER_NO in (''' + @row_num +''')'

 
작은따옴표 의 갯수가 상당히 중요 합니다.
작은 따옴표 하나를 문자열 내에서(문자열은 작은 따옴표로 묶이지요) 표현 하려면?
작은 따옴표 두개를 사용해야 합니다.

 
SQLER 참고

"쇼핑몰·홈페이지·오픈마켓
블로그·페이스북·이메일 등의 각종 마케팅 글쓰기,
각종 광고, 영업, 판매, 제안서, 전단지
반응율 3배×10배 이상 높이는 마법의 8단계 공식"
자세히보기

Comments

번호 제목 글쓴이 날짜 조회
2415 [MSSQL] OPENROWSET 13 김영철 01.23 2959
2414 OpenRowSet 이용하여 엑셀파일 DB로 저장하기 13 김영철 01.23 3492
2413 MSSQL DBA GUIDE - 테이블 관리 13 김영철 01.23 2879
2412 우편번호 검색 DB 13 김영철 01.23 2282
2411 [MSSQL] DB 생성 및 용량수정 13 김영철 01.23 3455
2410 웹프로그래밍 언어별 데이터베이스연결 (ASP편) 13 김영철 01.23 2930
2409 [SQL] 페이징 처리 13 김영철 01.23 2898
2408 [MSSQL] 그룹별 상위 n명 가져오기 예제 13 김영철 01.23 2711
2407 [MS SQL] 랜덤 추출 13 김영철 01.23 2592
2406 MS-SQL SERVER 2000 개론 [강력추천] 13 김영철 01.23 1984
2405 [SQL 2005 업그레이드 가이드] SQL Server 2005 설치 13 김영철 01.23 2625
2404 MSSQL 2005 Q&A 13 김영철 01.23 2860
2403 DBA라면 이 정도는 알고 있어야 하지 않을까요 !!! 13 김영철 01.23 1575
열람중 검색 in 부분에대한 프로시져 처리법 13 김영철 01.23 2143
2401 [MSSQL]데이터베이스 옵션 설정 99 단국강토 01.12 3053
2400 set xact_abort on 사용시 주의점.(2) 99 단국강토 01.12 2898
2399 MSSQL 프로시져 만들기 99 단국강토 01.08 2093
2398 [MS-SQL]동적SQL을 만들때 유의사항-2 99 단국강토 01.08 1861
2397 [MS-SQL]동적SQL을 만들때 유의사항-1 99 단국강토 01.08 3682
2396 DBMS에 따른 날짜포맷 변환 99 단국강토 01.07 2307
2395 MSSQL 기본 접속 포트 1433 변경 및 서버 alias 사용 99 단국강토 01.07 3940
2394 MSSQL SERVER에서 접속 port 변경하기 99 단국강토 01.06 2887
2393 검색어 로그 리스트 뽑는 퀄리... 99 단국강토 01.06 1645
2392 T-SQL: Parameter Sniffing 쿼리 튜닝 99 단국강토 01.05 2180
2391 mssql 2005 [퀄리분석기 단축키설정] -SSMS 99 단국강토 01.05 2650
2390 퀄럼이름 쉽게 가져오기 99 단국강토 01.03 2989
2389 MSSQL 내장 함수 목록 99 단국강토 01.03 2150
2388 동적 쿼리의 해결사 sp_executesql vs. exec 99 단국강토 01.02 2950
2387 MsSql 날짜 함수 99 단국강토 01.02 2044
2386 SQL Server에서 글로벌 변수 구현하기 99 단국강토 12.30 1971
마케팅
특별 마케팅자료
다운로드 마케팅자료
창업,경영
기획,카피,상품전략
동기부여,성취