2015-09-01 73 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