SQL Server로 CSV 파일 Import
【수입】를 하기 위해 ..csv를 사용하여 SQL 합니다.BULK INSERT기본적인 질문이 몇 가지 있습니다.
문제:
에는 CSV를 사용할 수 .
,의 중간 description)에서는 이 데이터를 comma)(comma)(comma)(description) Import는 어떻게 해야는 Excel CSV로 둘러싸여 있습니다.
""(큰따옴표) [다음 예시와 같이]그럼 Import는 어떻게 처리할 수 있을까요?일부 행에 잘못된 데이터가 있는 경우 어떤 Import 스킵이 있는지 추적하려면 어떻게 해야 합니까?(가져올 수 없는 행을 건너뜁니다)
다음으로 헤더가 있는 CSV의 예를 나타냅니다.
Name,Class,Subject,ExamDate,Mark,Description
Prabhat,4,Math,2/10/2013,25,Test data for prabhat.
Murari,5,Science,2/11/2013,24,"Test data for his's test, where we can test 2nd ROW, Test."
sanjay,4,Science,,25,Test Only.
가져올 SQL 문:
BULK INSERT SchoolsTemp
FROM 'C:\CSVData\Schools.csv'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ',', --CSV field delimiter
ROWTERMINATOR = '\n', --Use to shift the control to next row
TABLOCK
)
기반 SQL Server CSV Import
에는 1) CSV를 포함할 수 .
,의 중간 description)에서는 이 데이터를 comma)(comma)(comma)(description) Import는 어떻게 해야
솔루션
★★★★★★★★★를 사용하고 있는 경우는,(기호) 딜리미터로서 필드 터미네이터로서의 콤마와 데이터내의 콤마를 구별하는 방법은 없습니다.는 다른 a i i른른른 a 。FIELDTERMINATOR||코드는 다음과 같으며 쉼표와 싱글슬래시를 완벽하게 처리합니다.
2)는 2) excel로 csv로 .
" ... "(큰따옴표) [다음 예시와 같이]그럼 Import는 어떻게 처리할 수 있을까요?
솔루션
할 수 한 후 를 'BULK'로 바꿀 수 이치노데이터를 테이블에 삽입한 후 큰따옴표로 대체할 수 있습니다.
update table
set columnhavingdoublequotes = replace(columnhavingdoublequotes,'"','')
3) 일부 행에 잘못된 데이터가 있는 경우 어떤 Import Skip을 추적합니까?(Import할 수 없는 행은 건너뜁니까?)
솔루션
잘못된 데이터 또는 형식으로 인해 테이블에 로드되지 않은 행을 처리하려면 ERRORFILE 속성을 사용하여 처리할 수 있습니다. 오류 파일 이름을 지정하십시오. 오류 파일에 오류가 있는 행을 기록합니다. 코드는 다음과 같아야 합니다.
BULK INSERT SchoolsTemp
FROM 'C:\CSVData\Schools.csv'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ',', --CSV field delimiter
ROWTERMINATOR = '\n', --Use to shift the control to next row
ERRORFILE = 'C:\CSVDATA\SchoolsErrorRows.csv',
TABLOCK
)
2013-11-05년 SQL Server Management Studio를 사용하여 CSV 파일을 데이터베이스로 가져오는 방법:
먼저 CSV 파일을 Import할 테이블을 데이터베이스에 작성합니다.테이블 작성 후:
SQL Server Management Studio를 사용하여 데이터베이스 로그인
데이터베이스를 오른쪽 클릭하여 [태스크]-> [데이터 Import...]를 선택합니다.
[Next] 버튼을 클릭합니다.
데이터 원본에 대해 플랫 파일 소스를 선택합니다.그런 다음 Browse 버튼을 사용하여 CSV 파일을 선택합니다.데이터 Import 방법을 설정한 후 [Next]> 버튼을 클릭합니다.
대상에서 올바른 데이터베이스 공급자를 선택합니다(예: SQL Server 2012의 경우 SQL Server Native Client 11.0을 사용할 수 있습니다).서버 이름을 입력하고 [Use SQL Server Authentication]체크박스를 켜고 [User Name], [Password] 및 [Database]를 입력한 후 [Next]> 버튼을 클릭합니다.
[ Select Source Tables and Views ]창에서 [Next]> 버튼을 클릭하기 전에 [Edit Mappings]를 편집할 수 있습니다.
[ Run immediate ]체크박스를 켜고 [Next]> 버튼을 클릭합니다.
[ Finish ](완료) 버튼을 클릭합니다.
2) 클라이언트가 excel에서 csv를 작성하면 콤마가 있는 데이터는 "..." (큰따옴표) (아래 예시와 같이) 안에 둘러싸여 있는데 Import는 어떻게 처리합니까?
FORMAT = 'CSV', FILDQ를 사용해야 합니다.UOTE = '' 옵션:
BULK INSERT SchoolsTemp
FROM 'C:\CSVData\Schools.csv'
WITH
(
FORMAT = 'CSV',
FIELDQUOTE = '"',
FIRSTROW = 2,
FIELDTERMINATOR = ',', --CSV field delimiter
ROWTERMINATOR = '\n', --Use to shift the control to next row
TABLOCK
)
데이터 문제의 콤마를 해결하는 가장 빠르고 쉬운 방법은 Windows의 목록 구분 기호 설정을 쉼표(파이프 등)가 아닌 다른 것으로 설정한 후 Excel을 사용하여 쉼표로 구분된 파일을 저장하는 것입니다.그런 다음 가져올 수 있는 파이프(또는 기타) 구분 파일이 생성됩니다.여기에서는, 이것을 설명합니다.
SQL 가져오기 마법사를 사용하지 않기 때문에 다음 단계를 수행합니다.

데이터를 Import하는 옵션 태스크에서 데이터베이스를 마우스 오른쪽 버튼으로 클릭합니다.
마법사가 열리면 암시할 데이터 유형을 선택합니다.이 경우는,
플랫 파일 소스
CSV 파일을 선택하면 CSV에서 테이블의 데이터 유형을 구성할 수 있지만 CSV에서 가져오는 것이 가장 좋습니다.
- [Next] (다음)을 클릭하여 마지막 옵션을 선택합니다.
SQL 클라이언트
인증의 종류에 따라서는, 이것을 선택하면, 매우 중요한 옵션이 표시됩니다.
- CSV에서는 테이블의 ID를 정의할 수 있습니다(CSV의 컬럼은 테이블의 필드와 동일하게 하는 것이 좋습니다).매핑 편집 옵션에서는 스프레드시트 열과 함께 각 테이블의 미리보기를 볼 수 있습니다.마법사가 기본적으로 ID를 삽입하도록 하려면 이 옵션을 선택하지 않습니다.
ID 삽입 사용
(통상은 1부터 시작하지 않습니다) 대신 CSV에 ID가 있는 열이 있는 경우 enable id insert를 선택하고 다음 단계는 마법사를 종료하는 것입니다.여기서 변경을 확인할 수 있습니다.
한편, 다음 창에 경보가 표시될 수 있습니다.또는 경고는 오류를 남기는 경우에만 이를 무시하는 것이 이상적입니다.
먼저 CSV 파일을 Data Table로 Import해야 합니다.
그런 다음 SQL BulkCopy를 사용하여 대량 행을 삽입할 수 있습니다.
using System;
using System.Data;
using System.Data.SqlClient;
namespace SqlBulkInsertExample
{
class Program
{
static void Main(string[] args)
{
DataTable prodSalesData = new DataTable("ProductSalesData");
// Create Column 1: SaleDate
DataColumn dateColumn = new DataColumn();
dateColumn.DataType = Type.GetType("System.DateTime");
dateColumn.ColumnName = "SaleDate";
// Create Column 2: ProductName
DataColumn productNameColumn = new DataColumn();
productNameColumn.ColumnName = "ProductName";
// Create Column 3: TotalSales
DataColumn totalSalesColumn = new DataColumn();
totalSalesColumn.DataType = Type.GetType("System.Int32");
totalSalesColumn.ColumnName = "TotalSales";
// Add the columns to the ProductSalesData DataTable
prodSalesData.Columns.Add(dateColumn);
prodSalesData.Columns.Add(productNameColumn);
prodSalesData.Columns.Add(totalSalesColumn);
// Let's populate the datatable with our stats.
// You can add as many rows as you want here!
// Create a new row
DataRow dailyProductSalesRow = prodSalesData.NewRow();
dailyProductSalesRow["SaleDate"] = DateTime.Now.Date;
dailyProductSalesRow["ProductName"] = "Nike";
dailyProductSalesRow["TotalSales"] = 10;
// Add the row to the ProductSalesData DataTable
prodSalesData.Rows.Add(dailyProductSalesRow);
// Copy the DataTable to SQL Server using SqlBulkCopy
using (SqlConnection dbConnection = new SqlConnection("Data Source=ProductHost;Initial Catalog=dbProduct;Integrated Security=SSPI;Connection Timeout=60;Min Pool Size=2;Max Pool Size=20;"))
{
dbConnection.Open();
using (SqlBulkCopy s = new SqlBulkCopy(dbConnection))
{
s.DestinationTableName = prodSalesData.TableName;
foreach (var column in prodSalesData.Columns)
s.ColumnMappings.Add(column.ToString(), column.ToString());
s.WriteToServer(prodSalesData);
}
}
}
}
}
해결 방법은 다음과 같습니다.
CSV 파일을 XLS 시트로 Excel로 저장하기만 하면 됩니다(이렇게 하면 구분자는 걱정할 필요가 없습니다).Excel의 스프레드시트 형식은 표로 읽혀지고 SQL 테이블로 직접 Import됩니다.)
SSIS를 사용한 파일 Import
Import Manager에 커스텀스크립트를 작성하여 원하는 데이터를 생략/수정합니다.(또는 마스터 스크립트를 실행하여 삭제할 데이터를 자세히 조사합니다.)
행운을 빌어요.
powershell을 사용하여 csv를 Import하는 사용자
## Install module if not installed, this is a one time install.
Install-Module SqlServer
## Input SQL Server Variables and CSV path
$csvPath = "D:\Orders.csv"
$csvDelimiter = ","
$serverName = "DESKTOP-DOG5T0Q\SQLEXPRESS"
$databaseName = "OrderDetails"
$tableSchema = "dbo"
$tableName = "Orders"
## Truncate Table
Invoke-Sqlcmd -ServerInstance $serverName -Database $databaseName -Query "TRUNCATE TABLE $tableSchema.$tableName"
## Import CSV into SQL
Import-Csv -Path $csvPath -header "Id","Country","Price","OrderQuantity" -Delimiter $csvDelimiter | Write-SqlTableData -ServerInstance $serverName -DatabaseName $databaseName -SchemaName $tableSchema -TableName $tableName -Force
출처: csv를 SQL 서버로 Import합니다(쿼리 OR 포함, SSMS 사용 쿼리 없음).
이것이 위의 질문에 대한 정확한 해결책이 아니라는 것을 알지만, 다른 서버에 있는 하나의 데이터베이스에서 로컬로 데이터를 복사하려고 할 때는 악몽이었습니다.
먼저 서버로부터 데이터를 내보냄으로써 그것을 실행하려고 했습니다.CSV/txt로컬 테이블로 Import합니다.
솔루션: Import할 : Import합니다.CSV또는 SSMS Import Data 마법사를 사용하면 항상 오류가 발생합니다(파싱에 문제가 있다고 하는 오류는 매우 일반적입니다).그리고 특별히 하고 있는 것은 아니지만, 그냥 수출하고 있는 것은CSV그런 다음 Import를 시도합니다. CSVDB오류는 항상 있었습니다.
매핑 섹션과 데이터 미리보기를 보려고 했는데 항상 큰 혼란이 있었어요. 가장 큰는 그 중 을 알고 있습니다.table"(으)"가 되어 있었습니다.JSON ★★★★★★★★★★★★★★★★★」SQL서서가루
그래서 결국 저는 다른 해결책을 생각해 냈고, 혹시 다른 사람에게도 비슷한 문제가 생길지 모르기 때문에 공유하고 싶습니다.
외부 서버에서 내보내기 마법사를 사용했습니다.
같은 프로세스를 반복하는 순서는 다음과 같습니다.
1)하여 1) 을 합니다.Tasks -> Export Data...
2) 마법사가 열리면 [Next](다음)을 선택하고 [Data Source](데이터 소스) 대신 [SQL Server Native Client](SQL Server 네이티브 클라이언트)를 선택합니다.
외부 서버의 경우 대부분의 경우 "인증 모드:"에서 "SQL Server 인증 사용"을 선택해야 합니다.
3) [Next] (다음)을 누른 후 [Destination](대상)을 선택해야 합니다.
SQL Server 네이티브클라이언트입니다.
다른 을 제공할 수 .DBDB.
[ (다음) 후 4에서 하는 두 .[ 음 ( Next ) ]버튼을 누른 후 테이블 전체를 1개에서 복사하는 두 가지 옵션이 있습니다.DB또는 쿼리를 기록하여 복사할 정확한 데이터를 지정합니다.저 같은 경우에는 테이블 전체가 아니라 일부만 필요했기 때문에 "전송할 데이터를 지정하기 위한 쿼리 작성"을 선택했습니다.
Wizard(마법사)로 이동하기 전에 다른 쿼리 에디터에서 쿼리를 기록하고 테스트할 것을 권장합니다.
5) 마지막으로 데이터를 선택할 대상 테이블을 지정해야 합니다.
두는 .
[dbo].[Query]몇 가지 커스텀 「」을 참조해 주세요.Table데이터를 내보낼 때 오류가 발생하거나 데이터에 대해 확실하지 않고 원하는 테이블로 이동하기 전에 데이터를 더 자세히 분석해야 할 경우 이름을 지정하십시오.
[다음] 버튼과 [완료]버튼을 눌러 마법사의 끝으로 이동합니다.
데이터가 "깨끗한"(데이터 제약 위반이 없는 경우 등) 서버에 파일을 저장할 수 있는 권한이 있는 경우, 이 답변은 모두 유효합니다.여기에 제시된 답변 중 일부는 첫 번째 오류(PK 위반, 데이터 손실 오류 등)로 중지되며 SSMS의 기본 제공 Import 태스크를 사용하는 경우 한 번에 하나의 오류를 표시합니다.모든 오류를 한 번에 수집하고 싶은 경우(.csv 파일을 준 사람에게 데이터를 정리하도록 지시하는 경우) 다음과 같은 답변을 권장합니다.또한 이 답변은 SQL을 직접 "작성"할 때 완벽한 유연성을 제공합니다.
주의: Windows OS를 실행하고 있으며 Excel 및 SSMS에 액세스할 수 있다고 가정합니다.그렇지 않은 경우 이 답변을 필요에 맞게 조정할 수 있습니다.
Excel.csv.csv.da. 수 .
INSERT음음 state state state state state state state=CONCATENATE("INSERT INTO dbo.MyTable (FirstName, LastName) VALUES ('", A1, "', '", B1,"')", CHAR(10), "GO")여기서 A1은 이름 데이터가 있는 셀이고 A2는 성 데이터가 있는 셀입니다.CHAR(10)는, 최종 행의 해, 「」를 참조해 주세요.GO이 할 수 .INSERT에러가 발생해도 다음 순서로 진행됩니다.
표시해 .
=CONCATENATION()Shift + End - 나머지 행에서 동일한 열을 강조 표시합니다.
리본으로 [홈]> [편집]> [필]> [다운]을 클릭합니다.
- 이렇게 하면 수식이 시트 아래까지 적용되므로 복사 붙여넣기, 드래그 등을 할 필요가 없습니다.수작업으로 수천 개의 행을 내려갑니다.
Ctrl + 된 SQL Ctrl + C를 합니다.
INSERT(START)SSMS에 붙여넣기
예상외로 각각의 을 알 수 .
INSERT★★★★★★★★★★★★★★★★★」GO명령어를 지정합니다.이것은 Excel에서 여러 줄의 값을 복사하는 기능(?)입니다.간단하게 검색하여 교환할 수 있습니다."INSERT★★★★★★★★★★★★★★★★★」GO"INSERT★★★★★★★★★★★★★★★★★」GO그걸 닦기 위해서요.이제 가져오기 프로세스를 실행할 준비가 되었습니다.
프로세스가 완료되면 [메시지(Messages)]창에서 오류가 없는지 확인합니다.모든 내용(Ctrl + A)을 선택하고 Excel로 복사한 후 열 필터를 사용하여 성공한 메시지를 제거할 수 있습니다. 그러면 모든 오류가 발생합니다.
이 프로세스는 다른 답변보다 시간이 오래 걸리지만 데이터가 "더럽고" SQL 위반으로 가득 찬 경우 최소한 모든 오류를 한 번에 수집하여 데이터를 제공한 사람에게 전송할 수 있습니다.
먼저 Excel로 파일을 Import한 후 DATA로 이동하여 TXT 파일에서 Import한 후 0의 접두사 값을 유지하는 csv 확장자를 선택하고 TEXT로 저장합니다.그렇지 않으면 Excel이 선두의 0을 드롭하기 때문입니다([0]으로 시작하는 필드에 숫자 데이터가 있는 경우 두 번 클릭하여 Excel을 열지 마십시오).그런 다음 탭 구분 텍스트 파일로 저장합니다.Excel로 Import할 경우 GENERAL, TEXT 등으로 저장할 수 있습니다.TEXT를 선택하면 YourCompany와 같은 필드의 문자열 중간에 따옴표가 붙습니다.LLC도 보존됩니다...
BULK INSERT dbo.YourTableName
FROM 'C:\Users\Steve\Downloads\yourfiletoIMPORT.txt'
WITH (
FirstRow = 2, (if skipping a header row)
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\n'
)
FORMAT 및 Field Quote 기능을 사용할 수 있으면 좋겠지만, 현재 사용하고 있는 SSMS 버전에서는 지원되지 않는 것 같습니다.
위에서 설명한 바와 같이 FORMAT과 FILDQ를 추가해야 합니다.일괄 삽입하기 위한 UOTE 옵션.CSV 데이터를 SQL Server로 변환합니다.이 경우 SQL 문은 다음과 같습니다.
BULK INSERT SchoolsTemp
FROM 'C:\CSVData\Schools.csv'
WITH
(
FORMAT = 'CSV',
FIELDQUOTE = '""',
FIRSTROW = 2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
TABLOCK
)
BULK INSERTSSMS는 일회성 Import 작업에 매우 적합합니다.사용 사례에 따라서는 SSMS 내부 또는 서드파티를 사용하는 다른 옵션이 필요할 수 있습니다.여기에서는 CSV 파일을 SQL Server로 Import하기 위한 다양한 옵션에 대해 설명합니다.프로세스 자동화(즉, 스케줄 설정) 방법 및 CSV 로케이션의 FTP 또는 파일스토리지를 지정하는 방법 등입니다.
인정받는 답변이 있는 것은 알지만, 다른 사람의 문제 해결에 도움이 될 수 있는 제 시나리오를 공유하고 싶습니다.툴
- ASP.NET
- EF Code-First 어프로치
- SSMS
- 엑셀
시나리오 CSV 형식의 데이터 세트를 로드하고 있었습니다.이 데이터 세트는 나중에 View에 표시됩니다.벌크 로드를 사용하려고 했지만 로딩할 수 없습니다.BULK LOAD를 사용하고 .
FIELDTERMINATOR = ','
엑셀 되었습니다.,저도 못 Flat file source가 접접사 directly directly directly directly directly를 하고 있었기 Code-First ApproachSSMS DB에만 모델을 만들었을 뿐 나중에 속성을 사용해야 하는 모델은 만들지 않았습니다.
솔루션
- 플랫 파일 소스를 사용하여 CSV 파일에서 DB 테이블을 만들었습니다(SSMS에서 DB 오른쪽 클릭 -> 플랫 파일 가져오기 -> CSV 경로를 선택하고 모든 설정을 지시에 따라 수행).
- Visual Studio에서 모델 클래스를 만듭니다(모든 데이터 유형 및 이름은 sql에 로드된 CSV 파일과 동일하게 유지해야 함).
Add-MigrationNuGet의- DB 업데이트
당신이 원하는 것은 아닐지도 모르지만, 또 다른 옵션은 메모장++용 CSV 린트 플러그인을 사용하는 것입니다.
플러그인은 csv 데이터를 미리 검증할 수 있습니다.즉, 누락된 따옴표, 잘못된 소수 구분 기호, 날짜/시간 형식 오류 등과 같은 잘못된 데이터를 확인할 수 있습니다.BULK INSERT scriptcsv SQL insert script.csv로 할 수 .
는 SQL을 포함합니다.INSERT1000일 CSV일시 10일시 10일시csv 해, 「csv」를 합니다.CREATE TABLE각 열에 대해 올바른 데이터 유형을 사용하여 파트를 만듭니다.
언급URL : https://stackoverflow.com/questions/15242757/import-csv-file-into-sql-server
'programing' 카테고리의 다른 글
| .gitignore 파일에 관계없이 강제 추가 (0) | 2023.04.13 |
|---|---|
| 앞뒤로 검색하려면 어떻게 해야 하나요? (0) | 2023.04.13 |
| 변수로서의 테이블 이름 (0) | 2023.04.08 |
| SQL 쿼리가 1개인 데이터베이스에서 모든 테이블을 삭제하려면 어떻게 해야 합니다. (0) | 2023.04.08 |
| SQL JOIN과 IN의 퍼포먼스 비교 (0) | 2023.04.08 |





