2013-06-26 2 views
-1

SQL 서버에서 나는이 (더 크게 쿼리의 WHERE 조항의 일부)처럼 보이는 쿼리SQL 서버

SELECT 1 
WHERE TPR.GRDE_PK IN 
    (
      SELECT CAST(String AS INT) 
      FROM dbo.Split_New(@GRADES, ',') 
    ) 

@Grades는 '14, 15 '및 dbo.Split_New입니다 동일이 String이라는 단일 열이 포함 된 테이블을 반환하는 함수입니다.이 열은 '14'와 '15'를 포함합니다. TPR.GRDE_PKINT입니다. 이 줄을 실행하려고하면 변환 오류가 발생합니다. 아무도 해결 방법을 알려 줄 수 있습니까? 여기

Split_New 기능처럼 보이는 것입니다 (나보다 더 숙련 된 사람에 의해 작성된, 그래서 그것을 모두 이해하지 못하는) :

function [dbo].[Split_New] ( 
@StringToSplit nvarchar(4000), 
@Separator varchar(128)) 
returns table as return 
with indices as 
( 
select 0 S, 1 E 
union all 
select E, charindex(@Separator, @StringToSplit, E) + len(@Separator) 
from indices 
where E > S 
) 
select substring(@StringToSplit,S, 
case when E > len(@Separator) then e-s-len(@Separator) else len(@StringToSplit) - s + 1 end) String 
--,S StartIndex   
from indices where S >0 
+0

당신이 기능을 게시 할 수 :

또는, 등으로 모든 기능을 사용하지 않도록 할 수 있습니까? –

+0

@Goat_CO 게시판 –

답변

1

문제는 TPR.GRDE_PK 값은 VARCHAR()로 캐스팅 정수입니다.

WHERE ','+CAST(TPR.GRDE_PK AS VARCHAR(25))+',' LIKE '%,'[email protected]+',%' 
0

그것을 보지 않고 정확히 무슨 말을하기가 어렵 함수에서.

당신이 함수에서 정확한 결과를 얻을 경우 먼저 참조 :

SELECT String FROM dbo.Split_New(@GRADES, ',') 

String 선행/후행 공백이있을 수 있습니다./변환

SELECT CONVERT(INT, LTRIM(RTRIM(String))) FROM dbo.Split_New(@GRADES, ',') 

ISNUMERIC() 기능은 필터링하고 수없는 몇 가지 문자 1을 반환로 변환 적합하지 않습니다 LTRIM()RTRIM() 기능을 사용하여 주조하기 전에 트림보십시오.

SELECT 1 
WHERE CAST(TPR.GRDE_PK AS VARCHAR(25)) IN 
    (
      SELECT * 
      FROM dbo.Split_New(@GRADES, ',') 
    ) 

기능은 잘 작동, 그것은 당신의 문자열 주어진 결과의 예상 테이블을 반환

+0

'LTRIM'과'RTRIM'을 추가하려고했는데 같은 오류가 발생했습니다. –

+0

이 기능을 혼자 사용해 보셨습니까? @grades 문자열은 무엇입니까? – Kaf