2014-09-14 1 views
0

이 문제에 대한 해결책을 찾지 못하는 것 같습니다. 다음은 내 검색어입니다.varchar 값 '1, 2, 3'을 데이터 유형 int로 변환 할 때 변환하지 못했습니다.

Declare @MY_STUDENT_ID Varchar(100) 

Select @MY_STUDENT_ID = COALESCE(@MY_STUDENT_ID + ',', '') + Convert(varchar, STUDENT_ID) From Some_TABLE Where FISCAL_YEAR = '2014' 

SELECT * FROM Table_Students WHERE STUDENT_ID IN (@MY_STUDENT_ID) 

기본적으로 첫 번째 검색어가 실행되고 모든 학생 ID가 연결되는 문자열 (예 : 1,2,3

그리고이 값은 두 번째 쿼리로 전달되지만 두 번째 쿼리는 제목에 게시 한이 오류를 제공합니다. 어떤 도움이 될지 모르니까 어떤 도움을 주시면 감사하겠습니다.

유형 STUDENT_ID 필드는 int입니다.

답변

2

동적 SQL을 사용하면됩니다. 그러나이 시나리오에서는 Martin SMith의 대답이 더 나은 것으로 보입니다. 그러나 동적 SQL을 사용하려면 이렇게해야합니다 (테스트되지 않은 의사 코드).

Declare @MY_STUDENT_ID varchar(100); 
DECLARE @sql nvasrchar(max); 

Select @MY_STUDENT_ID = COALESCE(@MY_STUDENT_ID + ',', '') + Convert(varchar, STUDENT_ID) From Some_TABLE Where FISCAL_YEAR = '2014' 

SELECT @sql = 'SELECT * FROM Table_Students WHERE STUDENT_ID IN (' + @MY_STUDENT_ID + ')'; 

EXEC sp_executesql @sql; 
4

쉼표로 구분 된 목록을 여기에 표시 할 필요가 없습니다.

는 그냥 서브 쿼리를 사용하여 직접

SELECT * 
FROM Table_Students 
WHERE STUDENT_ID IN (SELECT StudentId 
        From Some_TABLE Where FISCAL_YEAR = '2014') 

SELECT * 
FROM Table_Students 
WHERE STUDENT_ID IN (1,2,3) 
과 동일하지 않습니다

SELECT * 
FROM Table_Students 
WHERE STUDENT_ID IN ('1,2,3') 

의 의미에 무언가를 생성 끝으로 귀하의 접근 방식은 작동하지 않습니다

목록에 닮은 내용을 가진 단일 문자열 매개 변수이기 때문에, 3 int 매개 변수보다.

+0

예이 방법이 적절한 지 알고 있지만 할 수 있다면 배우고 싶었습니다. 그것은 내가 위에 게시했던 것처럼 그 길이다. –

+3

여기서 피해야하는 동적 SQL에 의해서만. –

관련 문제