복붙노트

[SQL] 단일 삽입 문에 삽입 할 수 SQL 서버 최대 행

SQL

단일 삽입 문에 삽입 할 수 SQL 서버 최대 행

이 질문 유사한 일괄 삽입을 수행 할

MySQL의에서 일괄 삽입 작업을 수행하는 방법

INSERT INTO tbl_name (a,b) 
VALUES (1, 2), (1, 3));

해결법

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

    1.당신은 하나 개의 문장에 삽입 할 수있는 행의 최대 수는 1000 때 사용하는 INSERT INTO ... VALUES ... 즉,

    당신은 하나 개의 문장에 삽입 할 수있는 행의 최대 수는 1000 때 사용하는 INSERT INTO ... VALUES ... 즉,

    INSERT INTO TableName( Colum1)
    VALUES (1),
           (2),
           (3),...... upto 1000 rows. 
    

    당신이 테이블에 행을 삽입 할 SELECT 문을 사용하는 경우에, 그에 대한 제한과 같은이 없습니다 ...

    INSERT INTO TableName (ColName)
    Select Col FROM AnotherTable
    

    이제 두 번째 질문에오고. 오류가 삽입 중에 발생하면 어떻게됩니까.

    당신은 다중 값 구조를 사용하여 행을 삽입하는 잘 경우

    INSERT INTO TableName( Colum1)
    VALUES (1),
           (2),
           (3)
    

    위의 시나리오에서 모든 행 삽입 오류가 전체 문이 롤백되고 행도 삽입되지 않습니다 발생하는 경우.

    하지만 당신은 각 행 즉에 대한 별도의 문 행을 삽입 한 경우 ...

    INSERT INTO TableName( Colum1) VALUES (1)
    INSERT INTO TableName( Colum1) VALUES (2)
    INSERT INTO TableName( Colum1) VALUES (3)
    

    위의 경우 각 행의 삽입은 별도의 성명 및 행 삽입 오류가 발생하면 문 삽입 특정 성공적으로 삽입됩니다 나머지 롤백됩니다 만있다.

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

    2.당신은 실제로 하위 쿼리를 사용하여 기록을 무제한으로 전달할 수 있습니다.

    당신은 실제로 하위 쿼리를 사용하여 기록을 무제한으로 전달할 수 있습니다.

    ;WITH NewData AS (SELECT * FROM ( VALUES  (1, 'A'),(2,'B'),(3,'C')) x (Id, SomeName))
    INSERT INTO TableName (Column1, Column2) SELECT Id, SomeName FROM NewData
    
  3. ==============================

    3.최대는 1000이지만,이 성능이 훨씬 작은 숫자에 감소하기 시작 것을 증명 됐어요. 유진 Philipov이 매우 주제를 탐구 좋은 기사를 쓴 :

    최대는 1000이지만,이 성능이 훨씬 작은 숫자에 감소하기 시작 것을 증명 됐어요. 유진 Philipov이 매우 주제를 탐구 좋은 기사를 쓴 :

    https://www.red-gate.com/simple-talk/sql/performance/comparing-multiple-rows-insert-vs-single-row-insert-with-three-data-load-methods/

    요약하면, 저자는 매우 실험 잘 설계된 일부를했고, 약 25 YMMV에서 스위트 스폿 (sweet spot)을 발견했다.

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

    4.당신이 시도 할 수 있습니다

    당신이 시도 할 수 있습니다

    with tempDataTable AS (SELECT *From (VALUES
    (18001,79626,'1992-12-11','1993-12-11') -- this is data u want to insert
    )x(empNO,sal,frmDate,toDate)) -- tempDataColoumns
    INSERT INTO salaries(emp_no,salary,from_date,to_date) SELECT empNO,sal,frmDate,toDate from newData
    

    제거 '-'쿼리시

  5. from https://stackoverflow.com/questions/37471803/sql-server-maximum-rows-that-can-be-inserted-in-a-single-insert-statment by cc-by-sa and MIT license