插入日期2008年
问题描述:
我试图导入用户在表与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
答
根据您的语言,数据格式有所不同。既然你提到你正在运行SQL Server的法语版本,这意味着
SELECT CONVERT(DATETIME, '2015-20-11')
会工作得很好,你,但
SELECT CONVERT(DATETIME, '2015-11-20')
会返回一个错误。是?
尝试从数据集中手动插入几行并查看哪种格式有效。您提供的样本行'2001-01-01 00:00:00.000'没有用,因为它没有超过月份(12)的最大值的值。从数据集中查找日期值大于12的日期值(如上例)。
此外,请确保数据集中的空值确实没有值而不是字符串'null'。最后,如果所有检查都正常,请查看隐藏在数据集中的可能的特殊/不可打印字符。
我没有机会测试它,因为我终于可以使用这种格式'2015-31-12 23:59:59.999'插入。谢谢你的回答,是的,我确实在数据集中找到了很多特殊/不可打印的字符! – marc99