2012-01-18 135 views
2

我想从我的Visual Studio项目中的文本文件导入一些数据到SQL数据库。除日期列外,所有列都已正确导入。我用下面的命令来导入数据:从txt文件导入数据到SQL数据库

BULK INSERT T2 FROM 'c:\Temp\Data.txt' WITH (FIELDTERMINATOR = ',') 

在文本文件中,我有日期像12年2月2日,12年3月2日等,但在数据库中,所有的行已经设置为01/01/1900。我认为这可能是因为日期格式与SQL数据库相比文本文件中的日期格式不同,有谁知道我可以如何将日期导入到数据库中?

谢谢

+0

BULK INSERT对日期相当挑剔,如果将日期格式更改为mm/dd/yyyy(使用/而不是 - 如果分隔日期部分),会发生什么情况?这应该可行,但更新数据文件有多可行? – Sparky 2012-01-18 21:54:11

+0

@Sparky数据在一个文本文件中,我将不得不手动更改超过2000行:-( – Blob 2012-01-18 22:02:21

+0

好吧,您有csv数据...在Excel中以csv文件形式打开它,然后以格式格式化日期您需要... – maneesha 2012-01-18 22:29:26

回答

1

我遇到了同样的问题,使用你的例子在2008r2。 没有错误,但全部设置为1900-01-01。 看起来这是bcp中的一个怪癖,用于填充DATE字段。 它的行为这样只为DATE列类型

所以如果你使用Date类型,将其更改为datetime或smalldatetime(包括工作对我来说),看看是否有帮助。 记得设置dateformat,以便正确阅读日期,月份和年份。 如果是(文本文件)日 - 月 - 年应该是:

set dateformat dmy 
BULK INSERT T2 FROM 'c:\Temp\Data.txt' WITH (FIELDTERMINATOR = ',') 

我能找到它的一个报告,但没有明确的答案,为什么出现这种情况: similar case reported here

+0

发现它作为MS数据库中的活动错误:[链接](https://connect.microsoft.com/SQLServer/feedback/details/526074/owner) – wmz 2012-01-19 00:25:17

+0

该命令工作完美,但现在我想知道,如何我告诉SQL错过一列导入?例如,我有6列数据用逗号分隔,我怎么只导入1,2,4和5列? – Blob 2012-02-27 09:59:59

+0

@ user1091114您将不得不使用格式文件。链接](http://msdn.microsoft.com/en-us/library/ms187908。 ASPX) – wmz 2012-02-27 12:37:32

相关问题