복붙노트

[SQL] 는 SQL Server의 "IN"절 제한

SQL

는 SQL Server의 "IN"절 제한

아무도 IN 절을 위해 (일치를위한 테스트) 한 표현의 목록에있을 수있는 값의 수에 대한 제한이 무엇인지 알고 있나요?

해결법

  1. ==============================

    1.예,이 한계이지만, MSDN은 단지 그것을 "수천"거짓말을 지정합니다 :

    예,이 한계이지만, MSDN은 단지 그것을 "수천"거짓말을 지정합니다 :

    세부 사항에 이러한 오류를 보면, 우리는이 제한 IN에있는 것이 아니라 일반적으로 쿼리 복잡성에 적용 참조 :

  2. ==============================

    2.그것은에만있는 것이 아니라 쿼리 계획 생성기 초과 메모리 제한과 관련이 있습니다. 나는 수천 그것은 종종 오류 사항을 확인 할 수 있지만 먼저 테이블에 값을 삽입하여 해결할 수 있습니다와 같이 쿼리를 바꿔

    그것은에만있는 것이 아니라 쿼리 계획 생성기 초과 메모리 제한과 관련이 있습니다. 나는 수천 그것은 종종 오류 사항을 확인 할 수 있지만 먼저 테이블에 값을 삽입하여 해결할 수 있습니다와 같이 쿼리를 바꿔

    select * from b where z in (select z from c) 
    

    값이 당신이 원하는 곳에 절에 테이블 C에 있습니다. 우리는 1 만 값의 절에 성공적으로 이것을 사용했다.

  3. ==============================

    3.사용중인 데이터베이스 엔진에 따라, 명령의 길이에 제한이있을 수 있습니다.

    사용중인 데이터베이스 엔진에 따라, 명령의 길이에 제한이있을 수 있습니다.

    SQL Server는 매우 큰 한계가있다 :

    그래서, 큰 IN 절을 위해, 그것은 값 삽입, 임시 테이블을 생성하고이 가입 할 것이 좋습니다. 그것은 빠르게도 작동합니다.

    ()가 한계입니다,하지만 당신은에서의 별도의 블록으로 당신의 가치를 나눌 수 있습니다

    Select * 
    From table 
    Where Col IN (123,123,222,....)
    or Col IN (456,878,888,....)
    

    2008 년 테이블 반환 매개 변수, 또는 여기에 설명 된 몇 가지 방법을 사용

  4. ==============================

    4.당신은 또한 발생할 수있는 다음 - 대신 하위 쿼리 여기서 X (1, ​​2, 3 ...)의 리터럴 값을 사용하는 경우 쿼리 (JDBC, Hiberante, SQL-GUI의 일종)을 실행하는 방법에 따라와 오류:

    당신은 또한 발생할 수있는 다음 - 대신 하위 쿼리 여기서 X (1, ​​2, 3 ...)의 리터럴 값을 사용하는 경우 쿼리 (JDBC, Hiberante, SQL-GUI의 일종)을 실행하는 방법에 따라와 오류:

    한계는 이러한 경우에 (또는 더 적은 다른 매개 변수가 존재할 때, 너무) 2100 것 그래서.

  5. from https://stackoverflow.com/questions/21178390/in-clause-limitation-in-sql-server by cc-by-sa and MIT license