SQL Server: 테이블 변수를 사용하여 선언된 변수의 "IN" 절 오류 수정
SQL Server IN
절은 강력한 필터링 도구입니다. 그러나 그 안에서 직접 선언된 변수를 사용하면 "varchar 값 ','을 데이터 유형 int로 변환할 때 변환에 실패했습니다."라는 오류가 발생하는 경우가 많습니다. 이는 변수에 쉼표로 구분된 문자열이 자주 포함되어 데이터 유형이 일치하지 않기 때문에 발생합니다.
문제 시나리오:
다음 코드 조각을 고려하세요.
<code class="language-sql">DECLARE @ExcludedList VARCHAR(MAX) SET @ExcludedList = '3,4,22' SELECT * FROM A WHERE Id NOT IN (@ExcludedList)</code>
결과 오류:
<code>Error: Conversion failed when converting the varchar value ',' to data type int.</code>
해결책: 테이블 변수
이 오류를 방지하려면 테이블 변수를 사용하여 값을 저장하세요. 테이블 변수는 다음과 같은 몇 가지 장점을 제공합니다.
테이블 변수를 동적으로 채우기:
다음 코드는 WHILE
루프를 사용하여 테이블 변수를 동적으로 채워 @ExcludedList
:
<code class="language-sql">DECLARE @your_list TABLE (list INT) -- Note: Changed to INT to match Id data type DECLARE @Value VARCHAR(25) DECLARE @Pos INT SET @ExcludedList = '3,4,22' -- Example list SET @Pos = CHARINDEX(',', @ExcludedList) WHILE @Pos > 0 BEGIN SET @Value = SUBSTRING(@ExcludedList, 1, @Pos - 1) INSERT INTO @your_list (list) VALUES (@Value) SET @ExcludedList = SUBSTRING(@ExcludedList, @Pos + 1, LEN(@ExcludedList)) SET @Pos = CHARINDEX(',', @ExcludedList) END IF LEN(@ExcludedList) > 0 BEGIN INSERT INTO @your_list (list) VALUES (@ExcludedList) END SELECT * FROM A WHERE Id NOT IN (SELECT list FROM @your_list)</code>
사용방법:
테이블 변수를 채운 후 IN
절에서 사용하세요.
<code class="language-sql">SELECT * FROM A WHERE Id NOT IN (SELECT list FROM @your_list)</code>
@your_list
내용을 기준으로 행을 효율적으로 필터링합니다. 이 방법은 데이터 유형 변환 문제를 방지하여 가변 개수의 쉼표로 구분된 값을 사용하여 동적 쿼리를 가능하게 합니다. list
의 @your_list
열은 Id
테이블에 있는 A
열의 데이터 유형과 일치해야 합니다.
위 내용은 테이블 변수는 선언된 변수와 함께 SQL Server의 'IN' 절 오류를 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!