日期字段上的批量错误,但插入到SQL Server的工作中

问题描述 投票:0回答:2

我正在尝试批量插入表中,但我一直收到此错误

Msg 4864,Level 16,State 1,Line 2 第1行第1列(HEURE)的批量加载数据转换错误(类型不匹配或指定代码页的无效字符)。

这是我的表的创建脚本

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[GST_TempDelete]
(
    [HEURE] [DATETIME] NULL,
    [Typebase] [FLOAT] NULL,
    [DATE] [DATETIME] NULL,
    [CHP] [NVARCHAR](4000) NULL,
    [tab] [NVARCHAR](4000) NULL,
    [ref1] [NVARCHAR](400) NULL,
    [ref2] [NVARCHAR](400) NULL
) ON [PRIMARY]
GO

这是我正在尝试用于批量插入的文件的内容

14:50:07|1|21/03/2019|SOMETEXT|PARAMbase|00000|54141|
14:50:07|1|21/03/2019|TEST|TEST|00000|54141|

这是批量插入查询

SET LANGUAGE FRENCH 

BULK INSERT GST_TempDelete   
FROM 'D:\TEST_DATA\TEMP\bulkInsert.txt' 
WITH (FIELDTERMINATOR ='|',ROWTERMINATOR = '|')

当我尝试使用INSERT INTO使用批量文件中的值插入数据时,它可以工作,但bulk insert本身仍然失败。

这是INSERT INTO查询:

INSERT INTO GST_TempDelete 
VALUES ('14:50:07', '1', '21/03/2019', 'TEST', 'TEST', '00000', '54141')

拜托,帮帮我解决这个问题。

提前致谢

sql-server bulkinsert
2个回答
0
投票

14:50:07 | 1 | 21/03/2019 | SOMETEXT | PARAMbase | 00000 | 54141 |

CSV文件中的第一列显然是时间格式。虽然它在表的DDL中有DATETIME类型。所以,似乎它从DATETIME变为TIME

CREATE TABLE [dbo].[GST_TempDelete](
    [HEURE] [time] NULL,
    [Typebase] [float] NULL,
    [DATE] [datetime] NULL,
    [CHP] [nvarchar](4000) NULL,
    [tab] [nvarchar](4000) NULL,
    [ref1] [nvarchar](400) NULL,
    [ref2] [nvarchar](400) NULL
) ON [PRIMARY]
GO

SET LANGUAGE FRENCH 
BULK INSERT GST_TempDelete   FROM 'D:\TEST_DATA\TEMP\bulkInsert.txt' WITH (FIELDTERMINATOR ='|',ROWTERMINATOR = '|')

当我尝试使用Insert插入数据以使用批量文件中的值时,它可以工作,但批量插入本身仍然失败

这可能是因为:

BULK INSERT对从文件读取的数据执行严格的数据验证和数据检查,这些数据可能导致现有脚本在无效数据上执行时失败。

参考:https://docs.microsoft.com/en-us/sql/t-sql/statements/bulk-insert-transact-sql?view=sql-server-2017


0
投票

得到了问题:它的日期列。 '21 / 03/2019'是正确的价值。

SET DATEFORMAT dmy;
insert into GST_TempDelete values('14:50:07','1.0','21/03/2019','TEST','TEST','00000','54141')
© www.soinside.com 2019 - 2024. All rights reserved.