我尝试以这种格式批量插入一些日期时间值:
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'
)但我得到的是:
行的大容量加载数据转换错误(类型不匹配或指定代码页的字符无效)
我知道如何定义代码页,但是是哪一个呢?有没有简单的解决方案?
谢谢。
克里斯蒂安
发布于 2010-10-27 23:02:41
运行此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即可。
希望这能起作用!
发布于 2010-10-27 22:33:29
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 tshttps://stackoverflow.com/questions/4034257
复制相似问题