繁体   English   中英

如何将批量 csv 文件插入 SQL 服务器

[英]How to insert bulk csv file into SQL Server

我有一个 csv 文件,其中包含这样的列

"Hold","EmpID","Source","Shard-Exists","Type"

但我的数据库表看起来像这样

//Note: My Id is auto increment
"Id","Hold","EmpID","Source","Type","CurrentDate"

我只是想知道如何在没有 shard-Exist 列的情况下将我的 csv 文件批量插入到数据库表中,并自动传递当前日期。

任何帮助或建议将不胜感激

TRUNCATE TABLE dbo.Actors;
GO
 
-- import the file
BULK INSERT dbo.Actors
FROM 'C:\Documents\Skyvia\csv-to-mssql\actor.csv'
WITH
(
        FORMAT='CSV',
        FIRSTROW=2
)
GO

您应该能够使用格式文件来完成“跳过表中的列”任务。 我将修改MS 文档中的示例。

<?xml version="1.0"?>
<BCPFORMAT xmlns="https://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <RECORD>
  <FIELD ID="1" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="7"/>
  <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="25" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="25" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="4" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="25" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="5" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="25" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="6" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="30" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
 </RECORD>
 <ROW>
  <COLUMN SOURCE="2" NAME="Hold" xsi:type="SQLINT"/>
  <COLUMN SOURCE="3" NAME="EmpID" xsi:type="SQLINT"/>
  <COLUMN SOURCE="4" NAME="Source" xsi:type="SQLVARYCHAR"/>
  <COLUMN SOURCE="6" NAME="Type" xsi:type="SQLVARYCHAR"/>
 </ROW>
</BCPFORMAT>

请注意,在<ROW>部分,我没有为 ID 或 CurrentDate 列指定任何内容。 还值得注意的是没有SOURCE="5" 这就是源数据中的Shard-Exists字段被跳过的方式。

至于为CurrentDate自动生成一个值,我的建议是向您的表添加一个默认约束。 可以这样做:

ALTER TABLE dbo.Actors
   ADD CONSTRAINT DF_Actors__CurrentDate
   DEFAULT (getdate()) FOR CurrentDate;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM