2015-09-01 29 views
0

我试图导入用户在表与SQL查询:插入日期2008年

TRUNCATE TABLE TEST.dbo.SALARIES; 
INSERT INTO TEST.dbo.SALARIES 
    (PSA_SALARIE,PSA_LIBELLE,PSA_PRENOM,PSA_DATESORTIE) 
    SELECT Matricule,Nom,Prenom,Date_sortie 
     FROM OPENROWSET(BULK 'E:\...\infoprofuniq.txt', 
     FORMATFILE='E:\...\infoprof.fmt', 
     FIRSTROW = 1, 
     CODEPAGE = 'ACP' 
) as t1 ; 

这里是我使用的FMT文件:

9.0 
4 
1 SQLCHAR 0 0 ";" 1 Matricule "" 
2 SQLCHAR 0 0 ";" 2 Prenom "" 
3 SQLCHAR 0 0 ";" 3 Nom "" 
4 SQLDATETIME 0 0 "\r\n" 4 Date_sortie "" 

这里是DATAS我试图进口的样本:

000001;JOHN;DOE;'2001-01-01 00:00:00.000' 

我得到的错误(通过谷歌翻译,因为我使用SQL Server的法语版本):

Msg 4864, Level 16, State 1, Line 2 
Error converting the bulk load data (type mismatch or invalid character for the specified codepage) for row 1, column 4 (Date_sortie). 

我使用单引号,双引号,没有和不同的日期格式试过,但我想不出什么格式的SQL Server等待。

PSA_DATESORTIE是一个允许空值的“日期时间”类型。

有人遇到过这个问题吗? 非常感谢! Marc

回答

0

根据您的语言,数据格式有所不同。既然你提到你正在运行SQL Server的法语版本,这意味着

SELECT CONVERT(DATETIME, '2015-20-11') 

会工作得很好,你,但

SELECT CONVERT(DATETIME, '2015-11-20') 

会返回一个错误。是?

尝试从数据集中手动插入几行并查看哪种格式有效。您提供的样本行'2001-01-01 00:00:00.000'没有用,因为它没有超过月份(12)的最大值的值。从数据集中查找日期值大于12的日期值(如上例)。

此外,请确保数据集中的空值确实没有值而不是字符串'null'。最后,如果所有检查都正常,请查看隐藏在数据集中的可能的特殊/不可打印字符。

+0

我没有机会测试它,因为我终于可以使用这种格式'2015-31-12 23:59:59.999'插入。谢谢你的回答,是的,我确实在数据集中找到了很多特殊/不可打印的字符! – marc99