最近在学习《SQL Server Integration Services Using Visual Studio 2005》这本书,在使用Bulk Insert从text文件向数据库导入数据时遇到一个问题:执行dtsx包成功,但是数据库中没有任何数据。
由于没有异常信息,我无法进行错误的跟踪。我完全是按照书中的步骤进行的操做,怎么会出现这么奇怪的问题呢?我怀疑会不会是字符编码的问题,修改了txt源文件问题依然存在。更加让人疑惑的是一个同事使用跟我完全相同的步骤却成功将数据导入到了数据库中。
为了找出问题之所在,我查看了Process选项卡中的信息:
将该操作生成的代码粘贴到Microsoft SQL Server Management Studio中运行,返回的是:0 row(s) affected…… 崩溃!同样的操作为什么同事就能成功,我的却不行呢,难道我人品太差
。
我决定求助Google大神,当我打开了Google后再次纠结了:该怎么描述我的问题呢,最后我决定还是看看Bulk Insert的语法格式吧。不看不要紧,一看就发现了问题。我的SSIS生成的代码是:BULK INSERT [test].[dbo].[a] FROM 'C:\Documents and Settings\Administrator\桌面\a.txt' WITH(CHECK_CONSTRAINTS,CODEPAGE='RAW',DATAFILETYPE='char',FIELDTERMINATOR='Comma {,}',ROWTERMINATOR='\n',FIRSTROW=2)。分隔符是“,”的时候,参数设置应该是:FIELDTERMINATOR=’,’而不是上面的FIELDTERMINATOR='Comma {,}'。我修改了粘贴到Microsoft SQL Server Management Studio的代码,运行成功了。
此时的我更加疑惑了,我跟同事都采用的如下图的设置,为什么运行的结果却不同呢?
我决定去同事的Process选项卡下查看一下生成的代码。
如上图所示,同事的并不显示生成的代码。我对比了我们2个的Microsoft SQL Server Management Studio的版本,发现我的是9.00.3042.00而他的是9.00.1399.00。低版本的没问题,高版本反而出了问题。
按照下图修改下设置(手动输入’,’,而不是从下拉列表中选择),顺利的解决了问题。