如何使用批量插入CSV日期时间格式的sql服务器正确?
我想使用批量插入文件csv插入到SQL Server 2012。相同的列有日期时间,但使用批量插入日期时间格式不起作用,并且我不使用SSIS。如何使用批量插入CSV日期时间格式的sql服务器正确?
示例创建表
CREATE TABLE [dbo].[scanindex_test](
[request_no] [varchar](13) NOT NULL,
[request_date] [datetime] NULL,
[id_card] [varchar](20) NULL,
[firstname] [varchar](100) NULL,
[surname] [varchar](100) NULL
)
查询SQL Server 2012中:
declare
@path varchar(255),
@sql varchar(5000)
SET @path = 'C:\Test\TESTFILE.csv'
set @sql = 'BULK INSERT [dbo].[scanindex_test] FROM ''' + @path + '''
' + ' WITH (
CODEPAGE=''RAW'',
FIELDTERMINATOR = '','',
ROWTERMINATOR = ''\n''
) '
print @sql
exec (@sql)
当我运行查询它的错误:
Msg 4864, Level 16, State 1, Line 1
Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 11, column 2 (request_date).
Msg 4865, Level 16, State 1, Line 1
Cannot bulk load because the maximum number of errors (10) was exceeded.
Msg 7399, Level 16, State 1, Line 1
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 1
Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)".
运行时实例CSV数据文件
request_no | request_date | id_card | firstname | surname
1 | 12/7/2017 | 1122 | AA | BB
2 | 12/7/2017 | 4399 | SS | EE
3 | 13/7/2017 | 5599 | QQ | KK
结果查询:
但我想导致日期时间格式(YYYY-MM-DD)正确:
request_no | request_date | id_card | firstname | surname
1 | 2017-07-12 00:00:00.000 | 1122 | AA | BB
2 | 2017-07-12 00:00:00.000 | 4399 | SS | EE
3 | 2017-07-13 00:00:00.000 | 5599 | QQ | KK
请帮帮我。谢谢提前;)
您需要将DATEFORMAT
更改为DMY
。添加以下到你的脚本的顶部应该工作:
SET DATEFORMAT DMY;
所以,你的完整剧本,应该是:
SET DATEFORMAT DMY;
declare
@path varchar(255),
@sql varchar(5000)
SET @path = 'C:\Test\TESTFILE.csv'
set @sql = 'BULK INSERT [dbo].[scanindex_test] FROM ''' + @path + '''
' + ' WITH (
CODEPAGE=''RAW'',
FIELDTERMINATOR = '','',
ROWTERMINATOR = ''\n''
) '
print @sql
exec (@sql)
据我所知,DATEFORMAT不能与BULK INSERT一起使用。 –
它使用他的样本数据为我工作 – Siyual
@Siyual非常感谢。这是工作; D – nettoon493
首先,SQL Server的进口和ETL工具是SSIS,不BCP或BULK INSERT。这些意味着*快速*批量操作。日期解析或任何类型的解析并不快。在这种情况下,您可以使用格式文件,如[使用格式文件批量导入数据]中所示(https://docs.microsoft.com/en-us/sql/relational-databases/import-export/使用格式文件到批量导入数据sql服务器),并指定匹配日期格式的日期字段的排序规则。 –
如果这不起作用,则必须将该文件导入登台表并解析日期字段。你不必这样做,但如果你使用SSIS –