1440

한 번에 삽입 할 데이터 세트가 여러 개 있습니다 (예 : 4 행).

내 테이블에는 세 개의 열이 있습니다.Person,IdOffice.

INSERT INTO MyTable VALUES ("John", 123, "Lloyds Office");
INSERT INTO MyTable VALUES ("Jane", 124, "Lloyds Office");
INSERT INTO MyTable VALUES ("Billy", 125, "London Office");
INSERT INTO MyTable VALUES ("Miranda", 126, "Bristol Office");

내가 할 수 있을까?insert하나의 4 행 모두SQL statement?


  • 진행자 노트:이 질문의 장점에 대한 모든 토론을이 메타 포스트. - George Stocker
  • oracle sql의 경우stackoverflow.com/a/93724/1452172 - ono2012
  • @ Chinggis6 예, 간단히 가능하면 열 값에 select를 사용하십시오. - Kzqai
  • @ 칭기즈칸 6 세insert into profiles (name, description) select first, 'Auto-generated' from users다른 짐승 인 삽입 및 업데이트 성명을 혼동하는 것 같습니다. - Kzqai
  • @ Chinggis6 아하나. 글쎄, 난 그냥 표준을 사용하는 것이 좋습니다insert ... select구문을 사용하면 필요한 모든 것을 얻을 수 있으며 원하는만큼 유연하게 사용할 수 있습니다.dev.mysql.com/doc/refman/5.5/en/insert.html - Kzqai

4 답변


1913

SQL Server 2008에서는 단일 SQL INSERT 문을 사용하여 여러 행을 삽입 할 수 있습니다.

INSERT INTO MyTable ( Column1, Column2 ) VALUES
( Value1, Value2 ), ( Value1, Value2 )

이것에 관해서는 MOC Course 2778A - SQL Server 2008에서 SQL 쿼리 작성하기를보십시오.

예 :

INSERT INTO MyTable ( Column1, Column2, Column3 )
VALUES ('John', 123, 'Lloyds Office'), 
('Jane', 124, 'Lloyds Office'), 
('Billy', 125, 'London Office'),
('Miranda', 126, 'Bristol Office');


  • 그리고 하나의 INSERT 문에서 최대 행 수는 1000입니다. - cryss
  • 그것은 "하나의 행의 최대 수VALUES절은 1000 "이다. 그것은INSERT명령문은 1000 행으로 제한됩니다. - Anon
  • 나는이 질문과 대답이 오래되었음을 알고 있지만 질문에 언급 된 방법과이 대답에서 기능적 차이가 있음을 언급하고자한다. 첫 x 째는 삽입 된 테이블에서 하나의 레코드로 트리거 X을 여러 번 실행합니다. 두 x 째는 삽입 된 테이블에서 x 개의 레코드 양으로 트리거를 1 회 실행합니다. 두 번째 방법은 트리거를 일괄 처리 삽입으로 올바르게 작동한다고 가정 할 때 성능을위한 최상의 선택입니다. - Edwin Stoteler
  • 이 방법은 SQL Server 2005에서 작동하지 않습니다.stackoverflow.com/questions/2624713/… - pkr298
  • @ahnbizcad T-SQL의 세미콜론은 일반적으로 선택 사항이지만 나중에 필요할 것으로보고됩니다. 당신은 각 문장을 종료하기 위해 그것들을 사용하는 습관에 빠져 있어야한다 - 당신의 코드는 너무 멋지게 보일 것이다. - NReilingh

733

단일 테이블에 삽입하는 경우 다음과 같이 쿼리를 작성할 수 있습니다 (MySQL에서만 가능).

INSERT INTO table1 (First, Last)
VALUES
    ('Fred', 'Smith'),
    ('John', 'Smith'),
    ('Michael', 'Smith'),
    ('Robert', 'Smith');



120

노트:이 대답은 SQL Server 2005에 대한 것입니다. SQL Server 2008 이상에서는 다른 대답에서 볼 수있는 훨씬 좋은 방법이 있습니다.

당신이 사용할 수있는SELECT UNION ALL을 포함한 INSERT:

INSERT INTO MyTable  (FirstCol, SecondCol)
    SELECT  'First' ,1
    UNION ALL
SELECT  'Second' ,2
    UNION ALL
SELECT  'Third' ,3
...

작은 데이터 세트에 대해서만, 귀하의 4 레코드에 대해 잘해야합니다.


71

INSERT사용하는 문장VALUES구문은 여러 행을 삽입 할 수 있습니다. 이를 수행하려면 각각 괄호 안에 쉼표로 구분 된 여러 개의 열 값 목록을 포함시킵니다.

예:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);


  • 더 좋은 질문은 왜 당신이 원할 것이냐는 것입니다. 왜 그냥 클리너 4 명령을 모두 한 번에 실행하지 않을까요? 한 행에 오류가 발생하면 일괄 처리에 실패합니다. 개별적으로 그룹화 할 경우 3/4이 성공합니다. - M T Head
  • @ m-t-head 나는 내가 왜하고 싶은지에 대한 예를 가지고 있으며, 당신에게 2 가지 이유를 줄 것이다. 데이터 무결성 검사 트리거가있는 테이블에 삽입하고 있습니다. 이유 1 - 값을 별도로 삽입하면 무결성 검사가 위반되어 트랜잭션을 롤백하고 오류를 반환합니다. 지연된 제약 조건을 지원하지 않는 SQL Server를 사용하고 있으므로 트리거 대신 일반 제약 조건이더라도 여전히 작동하지 않습니다. 이유 2 - 무결성 검사는 값 비싼 절차이므로 트랜잭션 당 1000 회가 아닌 한 번 실행하는 것이 좋습니다. 아직 해결책을 찾고 있습니다. - tomosius
  • 하나의 CTE를 만들고 YourTable (ID, Name)에 insert를 사용할 수 있습니다. select ID, CTE로부터 Name - Mohammad Farahani
  • 이 질문은 어떻습니까?stackoverflow.com/questions/51763204/…기본적으로 동일한 관심사이지만 중복 기록의 경우 업데이트 기능이 있습니다. - DayIsGreen
  • @ m-t-e-head 주된 이유는 실제로 성능입니다. 합리적 크기의 배치로 묶고 일괄 처리 당 하나의 INSERT를 사용하면 수천 또는 수백만 개의 행을 삽입하는 것이 훨씬 빠릅니다. - uncoder

연결된 질문


관련된 질문

최근 질문