Sql 批量插入日期时间数据
我尝试以以下格式批量插入一些日期时间值: 31/12/2005 00:00:00 使用类似这样的方法:Sql 批量插入日期时间数据,sql,sql-server,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' ) 但我明白了: 行的大容量加载数据转换错误
create table Seed
(
StartDate datetime not null
)
BULK INSERT Seed
FROM 'd:\dump\Seed.txt'
WITH
(
firstrow=2,
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\n'
)
但我明白了:
行的大容量加载数据转换错误(指定代码页的类型不匹配或无效字符)
我知道如何定义代码页,但哪一个?有简单的解决办法吗
谢谢
ChristianSQL 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
运行此T-SQL时登录到SQL实例的用户的默认语言是什么?您指定的日期格式为31/12/2005 00:00:00,看起来是英国的,您的默认语言可能是美国英语 尝试运行此T-SQL以确定您当前的语言:
SELECT @@language, @@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
更改默认语言后,重新连接查询窗口,现在应该使用新的默认语言
要返回到以前的语言设置,只需使用以前的语言设置再次执行EXEC sp_defaultlanguage
希望这能奏效 除非你的问题中有输入错误,否则2005年12月32日不是有效日期,因此类型不匹配。谢谢。抱歉乔编辑了它…谢谢你的努力。我想我会在原始文件中格式化,以避免所有这些。可惜sql server无法处理非美国日期…谢谢,这看起来很有趣-是的,我的语言是/曾经是美国英语我不认为这会改变批量插入的行为。