2010-10-27 129 views
2

我嘗試散裝這種格式插入一些datetime值:使用像這樣批量插入datetime數據

31/12/2005 00:00:00

create table Seed 
(
    StartDate datetime not null 
) 
BULK INSERT Seed 
FROM 'd:\dump\Seed.txt' 
WITH 
( 
    firstrow=2, 
    FIELDTERMINATOR = '\t', 
    ROWTERMINATOR = '\n' 
) 

但我得到這個:用於行

批量加載數據轉換錯誤(類型不匹配或無效字符指定的代碼頁)

我知道如何定義一個代碼頁,但哪個?有一個簡單的解決方案嗎?

謝謝。

基督教

+0

除非這是您的問題中的拼寫錯誤,否則32/12/2005不是有效的日期,因此類型不匹配。 – 2010-10-27 14:23:20

+0

謝謝。對不起,喬編輯了它...... – cs0815 2010-10-27 14:26:46

回答

3

運行此t-sql時登錄到SQL實例的用戶的缺省語言是什麼?您指定日期格式31/12/2005 00:00:00看起來是英國的,也許你的默認語言是us_english。

嘗試運行這個T-SQL來確定當前的語言:

SELECT @@語言,@@ LANGID

如果是美國英語,那麼你的日期格式應爲MM/DD/YYYY HH:MM :SS

爲了讓你的榜樣活着,嘗試做更改默認語言爲當前用戶執行以下操作:

--Get the current language setting for connected user 
SELECT @@LANGUAGE,@@LANGID 

--Get information about all languages 
EXEC sys.sp_helplanguage 

--Get the name of the current user 
DECLARE @sysuser NVARCHAR(30) 

SET @sysuser = SYSTEM_USER 

PRINT @sysuser 
EXEC sp_defaultlanguage @sysuser, 'british' --satisfying your example date 

你已經改變了d後默認語言,重新連接你的查詢窗口,你應該現在使用新的默認語言。

要恢復到以前的語言設置,只需使用您以前的語言設置再次執行sp_defaultlanguage。

希望這樣的作品!

+0

感謝這看起來很有趣 - 是的,我的語言是/是us_english – cs0815 2010-10-27 15:18:15

+1

我不認爲這會改變BULK INSERT的行爲。 – 2010-10-27 15:26:46

2

的SQL Server是不會到DD/MM/YYYY日期格式正確轉換。您需要將輸入文件重新格式化爲MM/DD/YYYY或插入char/varchar數據類型,然後將字符串操作爲另一個日期時間列的正確格式。例如:

create table TempSeed 
(
    StartDate varchar(50) not null 
) 

BULK INSERT TempSeed 
FROM 'd:\dump\Seed.txt' 
WITH 
( 
    firstrow=2, 
    FIELDTERMINATOR = '\t', 
    ROWTERMINATOR = '\n' 
) 

create table Seed 
(
    StartDate datetime not null 
) 

insert into Seed 
    (StartDate) 
    select CAST(substring(ts.StartDate,4,3) + stuff(ts.StartDate,4,3,'') as datetime) 
     from TempSeed ts 
+1

感謝所有的努力。我想我會在原始文件中設置格式以避免這一切。慚愧sql服務器無法應付非美國日期... – cs0815 2010-10-27 14:56:12