프로시저 작성중인데요 아래소스에서
@l_adid 값은 34,12,34 이런식으로 넘어 옵니다.
그러면 프로시저에서
@l_adid VARCHAR(1000)
select ........... WHERE A.adid in (@l_adid)
varchar 값 34,12,34 을(를) 데이터 형식 int(으)로 변환하지 못했습니다. 라고 오류가 납니다.
adid필드가 int값이여서 그런거 같은데 그렇다고 34,12,34 게 값이 오기때문에
앞단(.Parameters.Append .CreateParameter("@l_adid", adVarChar, adParamInput, 1000 , l_adid) ) 에서 int로 받으면 잘못된 값이라고 오류가 납니다.
cast(@l_adid as varchar(100)) 이런식으로 변환을 해도 안되는데 어떻게 해야 하나요?
Comment 6
-
Hisory
2014.06.20 16:36
-
hhhh
2014.06.20 16:51
마찬가지네요 ㅠㅠ
-
Hisory
2014.06.20 17:23
아 ...
sp_Executesql 을 이용해 보시는것도 방법이겠네여
-
나는짱이야
2014.06.20 17:08
in구문에 저거 못 씁니다. 테이블 변수 이용해보세요.http://bbangguri.tistory.com/entry/MS-SQL-WHERE-IN-%EB%AC%B8-%EC%A0%95%EC%A0%81%EC%9C%BC%EB%A1%9C-%EC%A1%B0%ED%9A%8C%ED%95%98%EA%B8%B0 -
초짜해커
2014.06.20 18:27
IN의 문법은 test_expression [ NOT ] IN ( subquery | expression [ ,...n ] ) 인데요.
test_expression과 subqquery가 반환하는 컬럼 또는 expression의 데이터 형식이 같아야 합니다.
adid가 INT이기 때문에 @l_adid도 INT여야 합니다. VARCHAR로 선언하고 '34,12,24' 이런식으로 전달하면 형변환 오류가 발생하죠.
해결방법은 'SELECT .... WHERE adid IN (' +@l_adid + ')' 이렇게 해서 exec 하시던지...
아니면 @l_adid를 테이블 반환 함수에 적용하던지 해야 합니다.
-
hhhh
2014.06.21 01:29
답변 주신분들 모두 감사합니다. 많은걸 배워가네요..
@l_adid ==> 34,12,34 이렇게 대신 @l_adid ==> '34','12','34' 이렇게 넘어가게 수정해보세요
혹은 http://blogs.interfacett.com/fn_split-table-valued-function-by-sql-instructor-jeff-jones 이걸 참고 해보세요