집 >데이터 베이스 >MySQL 튜토리얼 >SQL Server IN 절에서 VARCHAR 변수를 사용하면 변환 오류가 발생하는 이유는 무엇입니까?
SQL Server IN 절 및 VARCHAR 변수: 문제 해결 가이드
문제:
다음 SQL Server 코드는 변환 오류를 생성합니다.
<code class="language-sql">DECLARE @ExcludedList VARCHAR(MAX) SET @ExcludedList = '3, 4, 22' -- Note: Strings are now enclosed in single quotes SELECT * FROM A WHERE Id NOT IN (@ExcludedList)</code>
오류 설명:
IN
절에는 비교되는 열과 동일한 데이터 유형의 쉼표로 구분된 값 목록이 필요합니다(이 경우 Id
(정수로 추정)). @ExcludedList
변수는 문자열을 포함하는 VARCHAR(MAX)
입니다. SQL Server는 암시적으로 전체 문자열을 정수로 변환하려고 시도하며 문자열에 쉼표가 포함되어 있으므로 오류가 발생합니다.
해결책:
IN
절 내에서 직접 문자열 변수를 사용하지 마세요. 대신 테이블 값 접근 방식을 사용하세요.
<code class="language-sql">DECLARE @ExcludedList VARCHAR(MAX) SET @ExcludedList = '3, 4, 22' DECLARE @IntExcludedList TABLE (ID INT); INSERT INTO @IntExcludedList (ID) SELECT value FROM STRING_SPLIT(@ExcludedList, ','); SELECT * FROM A WHERE Id NOT IN (SELECT ID FROM @IntExcludedList);</code>
이 개선된 코드는 쉼표로 구분된 문자열을 개별 행으로 효율적으로 분할하는 내장 함수인 STRING_SPLIT
를 활용합니다. 그런 다음 각 행의 값이 정수 테이블 변수 @IntExcludedList
에 삽입되어 Id
열과 정확하게 비교할 수 있습니다. 이 방법은 암시적 변환을 방지하고 IN
절이 의도한 대로 작동하도록 보장합니다. @ExcludedList
.
이 접근 방식은 SUBSTRING
및 PATINDEX
을 사용한 원래 솔루션보다 더 효율적이고 읽기 쉽습니다. 최적의 성능을 위해 SQL Server에 내장된 문자열 조작 기능을 활용합니다.
위 내용은 SQL Server IN 절에서 VARCHAR 변수를 사용하면 변환 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!