Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 大容量插入与格式文件不匹配_Sql Server_Sql Server 2012_Bulkinsert - Fatal编程技术网

Sql server 大容量插入与格式文件不匹配

Sql server 大容量插入与格式文件不匹配,sql-server,sql-server-2012,bulkinsert,Sql Server,Sql Server 2012,Bulkinsert,我在尝试大容量插入时遇到了一个问题,我无法让它与带有生日列的格式文件一起工作,我得到的只是一个不匹配的错误。 我在下面得到了这个错误 第1行第5列(生日)的大容量加载数据转换错误(指定代码页的类型不匹配或无效字符)。[SQLSTATE 42000](错误4864)。我的格式文件也设置为datetime,临时表也设置为datetime。此外,open_date列将抛出相同的错误。到目前为止,我唯一能让它工作的方法就是做一个浮子 ( MEMBERNUMBER float ,[FI

我在尝试大容量插入时遇到了一个问题,我无法让它与带有生日列的格式文件一起工作,我得到的只是一个不匹配的错误。 我在下面得到了这个错误 第1行第5列(生日)的大容量加载数据转换错误(指定代码页的类型不匹配或无效字符)。[SQLSTATE 42000](错误4864)。我的格式文件也设置为datetime,临时表也设置为datetime。此外,open_date列将抛出相同的错误。到目前为止,我唯一能让它工作的方法就是做一个浮子

(
    MEMBERNUMBER float
      ,[FIRSTNAME] varchar(255) null
      ,[MIDDLENAME] varchar(255) null
      ,[LASTNAME]varchar(255) null
      ,[BIRTHDATE] datetime null
      ,[GENDER] varchar(255) null
      ,[MARITALSTATUS] varchar(255) null
      ,[OCCUPATIONINDUSTRY] varchar(255) null
      ,[OCCUPATIONTITLE]varchar(255) null
      ,[ADDRESS1]varchar(255) null
      ,[ADDRESS2]varchar(255)null
      ,[CITY] varchar(255)null
      ,[STATE] varchar(255)null
      ,[POSTALCODE] float null
      ,[HOMEPHONE] varchar(255) null
      ,[CELLPHONE] varchar(255) null
      ,[WORKPHONE] varchar(255) null
      ,[EMAIL] varchar(255) null
      ,[ALTERNATEEMAIL] varchar(255) null
      ,[OPEN_DATE] datetime null
      ,[MARKETINGOPTION] varchar(255) null

)

BULK INSERT CSVTempData
FROM '\\eftroot\ftps\usr\EmailMarketing.csv'
WITH
(FormatFile = '\\EFTRoot\ftps\Usr\FormatFiles\Test.fmt')

-- format file here 
8.0
21

1   SQLFLT8   0   30  ","        1  MEMBERNUMBER        SQL_Latin1_General_CP1_CI_AS
2   SQLCHAR   0   255  ","       2  FIRSTNAME           SQL_Latin1_General_CP1_CI_AS
3   SQLCHAR   0   255   ","      3  MIDDLENAME          SQL_Latin1_General_CP1_CI_AS
4   SQLCHAR   0   255  ","       4  LASTNAME            SQL_Latin1_General_CP1_CI_AS
5   SQLDATETIME  0  9 ","     5 BIRTHDATE           SQL_Latin1_General_CP1_CI_AS
6   SQLCHAR   0   255   ","      6  GENDER              SQL_Latin1_General_CP1_CI_AS
7   SQLCHAR   0   255   ","      7  MARITALSTATUS       SQL_Latin1_General_CP1_CI_AS
8   SQLCHAR   0   255   ","      8  OCCUPATIONINDUSTRY  SQL_Latin1_General_CP1_CI_AS
9   SQLCHAR   0   255   ","      9  OCCUPATIONTITLE     SQL_Latin1_General_CP1_CI_AS
10  SQLCHAR   0   255   ","      10 ADDRESS1            SQL_Latin1_General_CP1_CI_AS
11  SQLCHAR   0   255   ","      11 ADDRESS2            SQL_Latin1_General_CP1_CI_AS
12  SQLCHAR   0   255   ","      12 CITY                SQL_Latin1_General_CP1_CI_AS
13  SQLCHAR   0   255   ","      13 STATE               SQL_Latin1_General_CP1_CI_AS
14  SQLFLT8   0   8   ","      14   POSTALCODE          SQL_Latin1_General_CP1_CI_AS
15  SQLCHAR   0   255   ","      15 HOMEPHONE           SQL_Latin1_General_CP1_CI_AS
16  SQLCHAR   0   255  ","       16 CELLPHONE           SQL_Latin1_General_CP1_CI_AS
17  SQLCHAR   0   255   ","      17 WORKPHONE           SQL_Latin1_General_CP1_CI_AS
18  SQLCHAR   0   255   ","      18 EMAIL               SQL_Latin1_General_CP1_CI_AS
19  SQLCHAR   0   255   ","      19 ALTERNATEEMAIL      SQL_Latin1_General_CP1_CI_AS
20  SQLDATETIME 0  9  ","      20   OPEN_DATE           SQL_Latin1_General_CP1_CI_AS
21  SQLCHAR   0   255   "\r\n"   21 MARKETINGOPTION     SQL_Latin1_General_CP1_CI_AS




insert into ser.dbo.MembersNew

select *
from CSVTempData

您是否有可能直接从Excel数据导入?Excel将日期存储为浮点值,但SQL Server不知道如何处理。您的CSV应该使用
yyyy-MM-dd
导出,不仅仅是因为它在Excel中的格式,而是因为它在文件中的实际值。要在Excel中执行此操作,您需要(某些变体)
文本(A1,“yyyy-MM-dd”)
(但格式字符串中使用的
和字符都要进行本地化,这在Excel中是如此)。或者,导入浮点数,然后使用
DATEADD(DAY,[value]-2,'1900-01-01')
转换为日期。不确定是否能够转换它,因为csv有40k条记录。是否有方法使用列本身转换它?批量插入
无法自行转换。如果表中有
FLOAT
列,则可以使用
SELECT。。导入CsvDataFinal
以在导入数据后转换数据。或者,您可以使用
SELECT。。从OPENROWSET(BULK..)
动态转换数据。(顺便说一句,对于SQL Server和Excel来说,4万行并不多。)