手写代码导入文本文件到SQLServer2000表的问题

jackymann 2008-01-22 11:17:00
先谢谢解答我问题的各位高手了。

要把文本文件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?

请高手们帮忙解答一下啊,非常感谢!
...全文
117 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ORARichard 2008-01-23
  • 打赏
  • 举报
回复
你可以用bcp生成tmp_src的格式文件,再根据你的abc.txt进行修改
fa_ge 2008-01-23
  • 打赏
  • 举报
回复

create table t
(id int,date datetime)

--在文本中保存内容为
/*
1 | 20071101 |
2 | 20080112 |
3 | 20080131 |
*/

bulk insert t from 'C:\Documents and Settings\liang\桌面\11.txt'
with
(
datafiletype='char',
fieldterminator='|',
rowterminator='|\n'
)

select * from t

/*
id date
----------- ------------------------------------------------------
1 2007-11-01 00:00:00.000
2 2008-01-12 00:00:00.000
3 2008-01-31 00:00:00.000

(所影响的行数为 3 行)
*/
ORARichard 2008-01-23
  • 打赏
  • 举报
回复
回9楼,2000也可以的
fa_ge 2008-01-23
  • 打赏
  • 举报
回复

--上面打错了

[code=SQL]
bulk insert dbo.tmp_src
from 'E:\abc.txt'
with
(
datafiletype='char',
fieldterminator ='¦',
rowterminator= '¦\n'
)


[/code]
fa_ge 2008-01-23
  • 打赏
  • 举报
回复

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

jackymann 2008-01-23
  • 打赏
  • 举报
回复
回复ORARichard:
SQLServer2005里面可以使用格式文件,SQLServer2000里也可以用吗?不好意思以前没用过这个
ORARichard 2008-01-23
  • 打赏
  • 举报
回复
还有一种方法 指定bulk insert 的FORMATFILE 参数。 关于FORMATFILE 文件的建立,参考bcp中的FORMATFILE
ORARichard 2008-01-23
  • 打赏
  • 举报
回复
关于问题2:
alter table dbo.tmp_src alter column 日期字段 varchar(8)
bulk insert ....
...
...
alter table dbo.tmp_src alter column 日期字段 datetime
jackymann 2008-01-22
  • 打赏
  • 举报
回复
高手们帮帮忙啊,没有更好的办法吗?还是分太少……
jackymann 2008-01-22
  • 打赏
  • 举报
回复
回复dawugui:
这个思路倒是没想到过,但是我写的这个东西不是只在本地用的,是通用代码,可能会在多个系统中使用,还是希望能不用对SQLServer进行修改才好……
谢谢回复
dawugui 2008-01-22
  • 打赏
  • 举报
回复
目前的解决办法是先把表dbo.tmp_src相应的字段设置成varchar(8)类型,导入以后,再在SQLServer里进行处理。

或者,你自己把sql server的默认日期改为你现在的格式.
jackymann 2008-01-22
  • 打赏
  • 举报
回复
free1879:
我试过,不行……
dawugui 2008-01-22
  • 打赏
  • 举报
回复
目前的解决办法是先把表dbo.tmp_src相应的字段设置成varchar(8)类型,导入以后,再在SQLServer里进行处理。

或者,你自己把sql server的默认日志改为你现在的格式.
free1879 2008-01-22
  • 打赏
  • 举报
回复
1.换行可以这样啊
ROWTERMINATOR =' |\n'

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧