2017-11-26 5 views
1

SQL Server 2008 테이블에 수천 개의 행을 삽입해야하는 기존 ASP 응용 프로그램이 있습니다. 현재 응용 프로그램은 각 행에 대해 INSERT 명령을 개별적으로 전송하므로 오랜 시간이 걸리고 테이블을 잠급니다.SQL Server에서 여러 행을 효율적으로 삽입합니다.

더 좋은 방법이 있나요?

Insert all rows into a temp table 

다음 할

SELECT INTO from the temp table 

: 어쩌면 예를 들면?

+0

여기서 삽입 할 행의 소스는 어디입니까? – Squirrel

+1

Sql 서버는 CSV에서 직접 대량 삽입 할 수 있습니다.이 q & a 기술은 spexidically 방법을 묻지는 않지만 언급합니다. https://stackoverflow.com/questions/19917300/bulk-insert-from-csv-file-to-ms- sql-database –

+0

응용 프로그램 자체의 소스입니다. 날짜 목록을 생성 한 다음 테이블에 추가해야합니다. – user1480192

답변

1

응용 프로그램 자체에서 날짜 목록을 생성하는 경우 필요한 추가 기능을 사용하여이 목록을 생성 할 수 있습니다.

SQL Server 2008에서는 하나의 명령에 여러 행을 삽입 할 수 있습니다. 이는 행 단위로 삽입하는 것보다 약간 낫습니다.

DECLARE @TABLE AS TABLE 
(
     RowID   INT IDENTITY 
    ,MyDate  DATETIME 
) 
; 

INSERT INTO @TABLE (MyDate) 
VALUES 
    (GETDATE()) 
    ,(GETDATE()+1) 
    ,(GETDATE()+2) 
    ,(GETDATE()+3) 
    ,(GETDATE()+4) 
    ,(GETDATE()+5) 
    ,(GETDATE()+6) 

SELECT * FROM @TABLE 
; 
: 여기

는 (당신은 분명 응용 프로그램에서 생성 될 것이다) 몇 가지 다른 날짜를 생성하는 더미 데이터에 대한 테이블 변수를 사용하고 GETDATE()를 사용하여, 당신이 그것을 할 수있는 방법의 예를 몇 가지 있습니다

결과 :

RowID | MyDate 
1  | 26/11/2017 10:51:49 
2  | 27/11/2017 10:51:49 
3  | 28/11/2017 10:51:49 
4  | 29/11/2017 10:51:49 
5  | 30/11/2017 10:51:49 
6  | 01/12/2017 10:51:49 
7  | 02/12/2017 10:51:49 
또한이 형식을 사용할 수 있습니다

:

INSERT INTO @TABLE (MyDate) 
SELECT GETDATE() 
    UNION ALL 
SELECT GETDATE() + 1 
    UNION ALL 
SELECT GETDATE() + 2 
    UNION ALL 
SELECT GETDATE() + 3 
    UNION ALL 
SELECT GETDATE() + 4 
    UNION ALL 
SELECT GETDATE() + 5 
    UNION ALL 
SELECT GETDATE() + 6 
; 

SELECT * FROM @TABLE 
; 
을개

반환 값 :

RowID | MyDate 
1  | 26/11/2017 10:51:49 
2  | 27/11/2017 10:51:49 
3  | 28/11/2017 10:51:49 
4  | 29/11/2017 10:51:49 
5  | 30/11/2017 10:51:49 
6  | 01/12/2017 10:51:49 
7  | 02/12/2017 10:51:49 

가 아닌 경우 ASP 전문가,하지만 당신은 응용 프로그램에서 문자열을 연결하는 경우, 각 날짜에 대한 완전히 새로운 INSERT 문으로 다시보다 지속적으로 오히려 문자열을 연결 할 수 있어야한다 .