프로시저 관련 질문 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단계 공식" |
☞자세히보기 |
|
|