批量插入日期时间数据

时间:2010-10-27 14:19:01

标签: sql sql-server

我尝试以这种格式批量插入一些日期时间值:

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'
)

但我明白了:

的批量加载数据转换错误(类型不匹配或指定代码页的无效字符)

我知道如何定义代码页但是哪个?有一个简单的解决方案吗?

感谢。

基督教

2 个答案:

答案 0 :(得分:3)

运行此T-SQL时登录到SQL实例的用户的默认语言是什么?您在31/12/2005 00:00:00指定的日期格式看起来是英国的,也许您的默认语言是US_English。

尝试运行此T-SQL以确定您当前的语言:

SELECT @@language, @@langid

如果是US_English,则您的日期格式应为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

更改默认语言后,重新连接查询窗口,现在应该使用新的默认语言。

要返回上一个语言设置,请使用之前的语言设置再次EXEC sp_defaultlanguage

希望这有效!

答案 1 :(得分:2)

SQL Server不会正确转换DD / MM / YYYY日期格式。您需要将输入文件重新格式化为MM / DD / YYYY或插入char / varchar数据类型,然后将字符串操作为另一个datetime列的正确格式。例如:

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