日期:2014-05-18  浏览次数:20407 次

手写代码导入文本文件到SQLServer2000表的问题
先谢谢解答我问题的各位高手了。

要把文本文件E:\abc.txt导入SQLServer2000的表dbo.tmp_src里,使用的是
bulk insert dbo.tmp_src
from 'E:\abc.txt'
with
(
fieldterminator = '|',
rowterminator = '|
'
)
其中tmp_src已经提前建好,只要把abc.txt追加到tmp_src里就可以了。有几个问题请各位高手帮忙解决一下,多谢了。
1. 'rowterminatord ='处:行分隔符是'|'加上换行符,我看在DTS设计器里,换行符是用{LF}表示的,但在此处应该怎么写呢?我现在是在

abc.txt文件里直接把换行符拷贝过来,但总觉得这样做很不保险,因为在上面的代码中不能显式的显示换行符。如果要显式的写出来,应该怎

么写?
2. abc.txt里有些字段存的是日期,格式是20080122这种形式,但如果我在表dbo.tmp_src里相应的字段设置成datetime型的话,使用上面语句

导入就会出错,错误类型是“类型不匹配”,目前的解决办法是先把表dbo.tmp_src相应的字段设置成varchar(8)类型,导入以后,再在

SQLServer里进行处理。有没有办法在导入的过程中把20080122这种格式的日期直接导到SQLServer的datetime类型字段的方法?
3. 想把abc.txt里的一个字段导成数值类型,比如int型或者float型,但是在abc.txt里,这个字段的有些值不是数值,而是'+'、'-'等字符值

。这样,用上面的代码导入时,会出现“类型不匹配”的错误,有没有办法在导入的时候,把这个字段直接导成数值型,当遇到不是数值型的

值时,把它置为空置或者0?

请高手们帮忙解答一下啊,非常感谢!

------解决方案--------------------
1.换行可以这样啊
ROWTERMINATOR =' |\n'

------解决方案--------------------
目前的解决办法是先把表dbo.tmp_src相应的字段设置成varchar(8)类型,导入以后,再在SQLServer里进行处理。

或者,你自己把sql server的默认日志改为你现在的格式.
------解决方案--------------------
关于问题2:
SQL code
alter table dbo.tmp_src alter column 日期字段 varchar(8)
bulk insert ....
...
...
alter table dbo.tmp_src alter column 日期字段 datetime

------解决方案--------------------
SQL code

bulk   insert   dbo.tmp_src 
from   'E:\abc.txt' 
with 
( 
datafiletype='char',
fieldterminator   =   ' ¦', 
rowterminator   =   ' ¦\t ' 
)