Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 将日期变量从文本文件读取到sqlserver表时出错_Sql Server_Bulkinsert - Fatal编程技术网

Sql server 将日期变量从文本文件读取到sqlserver表时出错

Sql server 将日期变量从文本文件读取到sqlserver表时出错,sql-server,bulkinsert,Sql Server,Bulkinsert,我试图将记事本中的CSV数据转换到我的数据库中,但出现转换错误。 我得到了类似的错误信息,但不同的问题后,研究了很多小时的问题。错误消息: Msg 4864, Level 16, State 1, Line 3 Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 1, column 4 (HireDate). Msg 4832, Level

我试图将记事本中的CSV数据转换到我的数据库中,但出现转换错误。 我得到了类似的错误信息,但不同的问题后,研究了很多小时的问题。错误消息:

Msg 4864, Level 16, State 1, Line 3
Bulk load data conversion error (type mismatch or invalid character for the specified  codepage) for row 1, column 4 (HireDate).
Msg 4832, Level 16, State 1, Line 3
Bulk load: An unexpected end of file was encountered in the data file.
Msg 7399, Level 16, State 1, Line 3
The OLE DB provider "BULK" for linked server "(null)" reported an error. The provider did  not give any information about the error.
Msg 7330, Level 16, State 2, Line 3
Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)".    
文件路径:“c:\Student.txt”。
Student.txt的示例内容: “wbrema”、“米洛”、“2012-02-15”、“2012-02-15”

数据库脚本:

CREATE TABLE [dbo].[Person](
[PersonID] [varchar](50) NOT NULL,
[FirstName] [varchar](50) NOT NULL,
[LastName] [varchar](50) NOT NULL,
[HireDate] [date] NOT NULL,
[Enrollment Date] [datetime] NOT NULL,
CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED 
(
    [PersonID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

沿以下行为原始数据创建保留表:

CREATE TABLE [dbo].[RAW_Person]
(
[PersonID] [varchar](50) NOT NULL,
[FirstName] [varchar](50) NOT NULL,
[LastName] [varchar](50) NOT NULL,
[HireDate] [varchar](50) NULL,
[Enrollment Date] [varchar](50) NULL
) 
将数据大容量插入该表

然后执行文本到日期的转换,作为最终插入的一部分

INSERT INTO 
Person (PersonID, FirstName, LastName, HireDate, [Enrollment Date])
SELECT PersonID, FirstName, LastName, 
CONVERT(date,     [HireDate],        120), 
CONVERT(datetime, [Enrollment Date], 120)
FROM RAW_Person
我使用了格式化代码120(ODBC数据格式),但您可能需要一些其他值。有关详细信息,请在帮助文件/MSDN中查找转换函数

一旦您成功地做到了这一点,您就可以摆脱保留表数据

TRUNCATE TABLE [dbo].[RAW_Person]
或者如果你再也不这样做了

DROP TABLE [dbo].[RAW_Person]

第一:在CSV中为“PersonID”添加值(或使其自动递增)

第二:删除CVS中的引用。您的线路应该是:

100,wbrema,Milo,2012-02-15,2012-02-15
现在,使用语句:

BULK
INSERT Person
FROM 'c:\Student.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)

。。。您应该能够导入数据。

@Kebab Zahirovic,您的解决方案可以工作,尽管我没有将文件扩展名从.txt更改为csv。如何仅读取PersionID和姓氏。这将解决我面临的全部挑战。虽然我没有将文件扩展名从.txt更改为csv,但您的解决方案仍然有效。如何只读取PersionID和姓氏。这将解决我面临的全部挑战。您需要设置文件格式-请参阅。不过,您可以使用以下技巧,请参阅@RBarryYoung提供的解决方案。