Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 批量插入日期时间数据_Sql_Sql Server - Fatal编程技术网

Sql 批量插入日期时间数据

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' ) 但我明白了: 行的大容量加载数据转换错误

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

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'
)
但我明白了:

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

我知道如何定义代码页,但哪一个?有简单的解决办法吗

谢谢


Christian

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

运行此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无法处理非美国日期…谢谢,这看起来很有趣-是的,我的语言是/曾经是美国英语我不认为这会改变批量插入的行为。