Excel 워크 시트에서 SQL 삽입 스크립트 생성


107

데이터베이스에 추가 할 큰 Excel 워크 시트가 있습니다.

이 Excel 워크 시트에서 SQL 삽입 스크립트를 생성 할 수 있습니까?


2
나는 모두를위한 SQL 스크립트를 얻을 수있는 간단한 도구 생성 insertupdate 바로 여기를
Pathros

내 VBA 매크로를 사용하여 SQL 명령을 생성 할 수도 있습니다. 더보기 : stackoverflow.com/questions/1570387/…
Petrik

답변:


202

정말 큰 파일 인 경우 언급 된 방법 중 하나를 사용하여 가져 오는 것이 이상적이라고 생각하지만 Excel을 사용하여 삽입 문을 만들 수 있습니다.

="INSERT INTO table_name VALUES('"&A1&"','"&B1&"','"&C1&"')"

MS SQL에서는 다음을 사용할 수 있습니다.

SET NOCOUNT ON

'영향을받은 행 1 개'주석을 모두 표시하지 않으려면 그리고 많은 행을 수행하고 오류가 발생하면 때때로 문 사이에 GO를 넣으십시오.


3
나는 사용하고 =CONCATENATE()있었지만 &기호를 사용하면 훨씬 더 가독성이 좋습니다!
mastazi 2015 년

1
@mastazi 동의합니다! 잠시 전에 &매개 변수 제한에 부딪혔을 때 전환했습니다. CONCATENATE()이제 제한이 255 개 매개 변수이므로 일반적인 문제는 아니지만 되돌릴 생각은 없습니다.
Hart CO

1
CONCATENATE ()는 갈 길입니다. 수식 입력 줄에서 fx 아이콘을 클릭하면 입력 한 내용을 볼 수 있습니다. 그냥 사용하고 서명하는 것보다 훨씬 깨끗합니다. 물론 사용하고 서명하는 것은 멋지지만 때로는 큰 따옴표 나 작은 따옴표가있을 때 누락 된 항목을 영원히 계산하게됩니다.
ian0411

1
셀에 따옴표가 있으면 작동하지 않습니다. 내 대답에서 수정 된 버전을 확인하십시오.
Simon Baars

2
@PreshanPradeepa 동일한 구문을 사용할 수 있습니다. SQL Server는 정수가 유효한 정수인 한 따옴표 안에 있는지 상관하지 않습니다.
Hart CO

29

많은 시간을 절약 할 수있는 편리한 도구가 있습니다.

http://tools.perceptus.ca/text-wiz.php?ops=7

테이블 이름, 필드 이름 및 데이터를 입력하기 만하면됩니다-탭으로 구분하고 Go!


7
민감한 데이터를 웹에 게시하지 마십시오. 웹 애플리케이션에 제출 한 데이터가 어떻게되는지 알 수있는 방법이 없습니다. 이러한 도구 중 일부는 데이터를 저장하고 공개적으로 사용할 수 있도록합니다
GabiM

28

Management Studio 인터페이스를 통해 적절한 테이블을 생성하고 아래와 같이 테이블에 데이터를 삽입 할 수 있습니다. 데이터의 양에 따라 다소 시간이 걸릴 수 있지만 매우 편리합니다.

여기에 이미지 설명 입력

여기에 이미지 설명 입력


능숙한. IDENTITY 열을 사용하면 행이 삽입 될 때 값이 자동 생성되므로 데이터가 무시 ​​되더라도 복사 버퍼에 열이 있어야합니다.
fortboise

열 목록에서 IDENTITY 열을 마지막으로 만들 수 있으며 추가 열이 전혀 필요하지 않습니다.
안드레이 모로 조프

1
Excel 시트에서 IDENTITY 값을 지정하지 않으면; IDENTITY 열을 제거하여 상위 200 개 행 편집 SQL 스크립트를 변경하고 다시 실행할 수 있습니다. 따라서 IDENTITY없이 값을 복사하여 붙여 넣을 때; 이 방법이 작동합니다.
aozan88

Excel의 날짜 및 시간 필드에 대해 문제가 발생한 다른 사람의 경우이 오류가 발생합니다. datetime 데이터는 어떤 이유로 SQL 측에서 "이진"데이터로 변환됩니다.
Kevin Vasko

1
@condiosluzverde 자신의 답변을 게시하는 것이 좋습니다. 이 답변을 편집하는 경우 커뮤니티 중재자가 변경 사항을 거부 할 수 있습니다.
Andrey Morozov

16

다음 Excel 문을 사용할 수 있습니다.

="INSERT INTO table_name(`"&$A$1&"`,`"&$B$1&"`,`"&$C$1&"`, `"&$D$1&"`) VALUES('"&SUBSTITUTE(A2, "'", "\'")&"','"&SUBSTITUTE(B2, "'", "\'")&"','"&SUBSTITUTE(C2, "'", "\'")&"', "&D2&");"

열 이름을 고려하고 열의 따옴표로 인한 컴파일 오류를 제거하므로 Hart CO의 대답보다 낫습니다. 마지막 열은 따옴표가없는 숫자 값 열의 예입니다.


1
잘 했어. GoogleSheets에서 열 이름 참조를 둘러싼`(grave / backtick)를 제거해야했습니다.
secretwep

5

데이터베이스에 따라 CSV로 내 보낸 다음 가져 오기 방법을 사용할 수 있습니다.

MySQL- http : //dev.mysql.com/doc/refman/5.1/en/load-data.html

PostgreSQL- http : //www.postgresql.org/docs/8.2/static/sql-copy.html


3
MS SQL에서는 SSMS의 가져 오기 마법사를 사용하여 Excel 파일을 가져올 수 있습니다.
Hart CO

1
@HartCO에 세부 정보를 추가하려면-SSMS 가져 오기 마법사로 이동하려면 데이터베이스를 마우스 오른쪽 단추로 클릭하고 작업 위로 마우스를 가져간 다음 상황에 맞는 메뉴 하단에있는 "데이터 가져 오기 ..."를 클릭합니다. 마법사의 단계를 따릅니다.
qxotk

2

VB를 사용하여 데이터 주위에 적절한 SQL 문을 추가하여 파일 행에 출력 할 내용을 작성할 수 있습니다. 나는 전에 이것을했다.


1

다음은 매우 잘 작동하는 또 다른 도구입니다.

http://www.convertcsv.com/csv-to-sql.htm

탭으로 구분 된 값을 취하고 INSERT 스크립트를 생성 할 수 있습니다. 복사하여 붙여넣고 2 단계 의 옵션 에서 "첫 번째 행은 열 이름입니다."확인란을 선택합니다.

그런 다음 아래로 스크롤하여 3 단계에서 "Schema.Table or View Name :"상자에 테이블 이름을 입력합니다.

테이블 삭제 및 생성 확인란에도주의를 기울이고 생성 된 스크립트를 실행하기 전에 확인하십시오.

이것은 내가 찾은 가장 빠르고 신뢰할 수있는 방법입니다.


1

PowerShell 갤러리 ConvertFrom-ExcelToSQLInsertImportExcel 에서 사용

NAME
    ConvertFrom-ExcelToSQLInsert
SYNTAX
    ConvertFrom-ExcelToSQLInsert [-TableName] <Object> [-Path] <Object> 
      [[-WorkSheetname] <Object>] [[-HeaderRow] <int>] 
      [[-Header] <string[]>] [-NoHeader] [-DataOnly]  [<CommonParameters>]
PARAMETERS
    -DataOnly
    -Header <string[]>
    -HeaderRow <int>
    -NoHeader
    -Path <Object>
    -TableName <Object>
    -WorkSheetname <Object>
    <CommonParameters>
        This cmdlet supports the common parameters: Verbose, Debug,
        ErrorAction, ErrorVariable, WarningAction, WarningVariable,
        OutBuffer, PipelineVariable, and OutVariable. For more information, see
        about_CommonParameters (http://go.microsoft.com/fwlink/?LinkID=113216).
ALIASES
    None
REMARKS
    None


0

이 쿼리는 Excel 파일 데이터를 데이터베이스에 삽입하기 위해 생성했습니다.이 ID와 가격은 숫자 값과 날짜 필드입니다. 이 쿼리는 내가 필요한 모든 유형을 요약했습니다.

="insert into  product (product_id,name,date,price) values("&A1&",'" &B1& "','" &C1& "'," &D1& ");"


    Id    Name           Date           price 
    7   Product 7   2017-01-05 15:28:37 200
    8   Product 8   2017-01-05 15:28:37 40
    9   Product 9   2017-01-05 15:32:31 500
    10  Product 10  2017-01-05 15:32:31 30
    11  Product 11  2017-01-05 15:32:31 99
    12  Product 12  2017-01-05 15:32:31 25

0

아래 C # 메서드를 사용하여 Excel 시트를 사용하여 삽입 스크립트를 생성 할 수 있습니다. 메서드를 실행하기 전에 NuGet 패키지 관리자에서 OfficeOpenXml 패키지를 가져 오면됩니다.

public string GenerateSQLInsertScripts() {

        var outputQuery = new StringBuilder();
        var tableName = "Your Table Name";
        if (file != null)
        {
            var filePath = @"D:\FileName.xsls";

            using (OfficeOpenXml.ExcelPackage xlPackage = new OfficeOpenXml.ExcelPackage(new FileInfo(filePath)))
            {
                var myWorksheet = xlPackage.Workbook.Worksheets.First(); //select the first sheet here
                var totalRows = myWorksheet.Dimension.End.Row;
                var totalColumns = myWorksheet.Dimension.End.Column;

                var columns = new StringBuilder(); //this is your columns

                var columnRows = myWorksheet.Cells[1, 1, 1, totalColumns].Select(c => c.Value == null ? string.Empty : c.Value.ToString());

                columns.Append("INSERT INTO["+ tableName +"] (");
                foreach (var colrow in columnRows)
                {
                    columns.Append("[");
                    columns.Append(colrow);
                    columns.Append("]");
                    columns.Append(",");
                }
                columns.Length--;
                columns.Append(") VALUES (");
                for (int rowNum = 2; rowNum <= totalRows; rowNum++) //selet starting row here
                {
                    var dataRows = myWorksheet.Cells[rowNum, 1, rowNum, totalColumns].Select(c => c.Value == null ? string.Empty : c.Value.ToString());

                    var finalQuery = new StringBuilder(); 
                    finalQuery.Append(columns);

                    foreach (var dataRow in dataRows)
                    {
                        finalQuery.Append("'");
                        finalQuery.Append(dataRow);
                        finalQuery.Append("'");
                        finalQuery.Append(",");
                    }
                    finalQuery.Length--;

                    finalQuery.Append(");");

                    outputQuery.Append(finalQuery);

                  }

            }
        }

return outputQuery.ToString();}


0

SQL 삽입을 생성하는 신뢰할 수있는 방법이 있으며 처리 과정에서 부분 매개 변수를 수정할 수 있습니다. 예를 들어, 수백 개의 데이터를 호환되지 않는 구조 및 필드 수를 가진 데이터베이스에 복사하는 등의 작업에 많은 도움이됩니다. 내가 사용하는 강력한 도구 인 IntellIJ DataGrip . DG는 WPS 사무실 또는 MS Excel에서 열 또는 줄로 데이터를 즉시 수신 할 수 있습니다. 복사 후 DG는 데이터를 SQL 삽입으로 내보낼 수 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.