我尝试以这种格式批量插入一些日期时间值:
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 :(得分: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