将文本导入到SQL

jxqn_liu 2009-12-24 09:11:22
文本test.txt内容

03S000 20091221070136 169240030702 0757
03S000 20091221070145 C1408843 0757
03S000 20091221070149 C0762613 0757
03S000 20091221070158 168296896600 0757
03S000 20091221070202 168299948482 0757
03S000 20091221070226 C0762614 0757
03S000 20091221070233 168301951510 0757
03S000 20091221070240 C0736182 0757
03S000 20091221070247 169166494781 0757
03S000 20091221070252 168302725533 0757


导入语句:

create table #tablename(a varchar(20),b varchar(50),c varchar(20),d varchar(50))
BULK INSERT #tablename
FROM 'D:\test.txt'
with
( --check_constraints
--DATAFILETYPE='char'--(包含unicode字符)如果包含字符和非unicode字符,就
--datafiletype='widenative'
--,MAXERRORS=0
FIELDTERMINATOR=' '
,ROWTERMINATOR='\n'
)
select * from #tablename
drop table #tablename


请问在不改的文本文件内容的情况下将数据导入到Sql Server中
...全文
79 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
fuxiaoyang13 2009-12-24
  • 打赏
  • 举报
回复
路过!!
jxqn_liu 2009-12-24
  • 打赏
  • 举报
回复
那有什么方式可以像DTS中导入导出的第二个文件格式“固定字段。信息以等宽按列对齐”方式导入;第一个文件格式是“带分隔符”,这个想显然不合适。我想以SQL Server 来说,不应该没有第二个文件格式导入数据的T-SQL语句吧
oopp1234567890 2009-12-24
  • 打赏
  • 举报
回复
你为什么不用导入 固定宽度来做 ?
dawugui 2009-12-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 jxqn_liu 的回复:]
引用 6 楼 dawugui 的回复:
引用 5 楼 jxqn_liu 的回复:
但是通过SQL企业管理器怎么能正确导入?

你在企业管理器中选择的是什么分隔符?如果你选的那个分隔符起作用,就在语句中也用这个分隔符试试.

是通过企业管理器中在选择导入格式的时候选择的是“固定字段。信息以等宽按列对齐”的方式导入的。再请问,这个方式对应的Bcp中对应的参数是什么?
[/Quote]
没有.
你要的内容就是我上面说的:

另:如果你的文本文件为一楼的格式,各字段起始结束位置相同.
可以把他导入个某个临时表的一个字段中,然后使用substring来截取.
jxqn_liu 2009-12-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dawugui 的回复:]
引用 5 楼 jxqn_liu 的回复:
但是通过SQL企业管理器怎么能正确导入?

你在企业管理器中选择的是什么分隔符?如果你选的那个分隔符起作用,就在语句中也用这个分隔符试试.
[/Quote]
是通过企业管理器中在选择导入格式的时候选择的是“固定字段。信息以等宽按列对齐”的方式导入的。再请问,这个方式对应的Bcp中对应的参数是什么?
mxc1225 2009-12-24
  • 打赏
  • 举报
回复
又学到了!
dawugui 2009-12-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jxqn_liu 的回复:]
但是通过SQL企业管理器怎么能正确导入?
[/Quote]
你在企业管理器中选择的是什么分隔符?如果你选的那个分隔符起作用,就在语句中也用这个分隔符试试.
jxqn_liu 2009-12-24
  • 打赏
  • 举报
回复
但是通过SQL企业管理器怎么能正确导入?
--小F-- 2009-12-24
  • 打赏
  • 举报
回复
看你格式整齐不 导入文本文件一般都是用格式化语言
dawugui 2009-12-24
  • 打赏
  • 举报
回复
另:如果你的文本文件为一楼的格式,各字段起始结束位置相同.
可以把他导入个某个临时表的一个字段中,然后使用substring来截取.
dawugui 2009-12-24
  • 打赏
  • 举报
回复
有关文本的导入导出请参考:

/** 导入文本文件 
EXEC master..xp_cmdshell 'bcp dbname..tablename in c:\DT.txt -c -Sservername -Usa -Ppassword'

/** 导出文本文件
EXEC master..xp_cmdshell 'bcp dbname..tablename out c:\DT.txt -c -Sservername -Usa -Ppassword'

EXEC master..xp_cmdshell 'bcp "Select * from dbname..tablename" queryout c:\DT.txt -c -Sservername -Usa -Ppassword'

导出到TXT文本,用逗号分开
exec master..xp_cmdshell 'bcp "库名..表名" out "d:\tt.txt" -c -t ,-U sa -P password'


BULK INSERT 库名..表名
FROM 'c:\test.txt'
WITH (
FIELDTERMINATOR = ';',
ROWTERMINATOR = '\n'
)
dawugui 2009-12-24
  • 打赏
  • 举报
回复
导入格式为:

BULK INSERT Northwind.dbo.[Order Details]
FROM 'D:\test.txt'
WITH
(
FIELDTERMINATOR = ' ',
ROWTERMINATOR = '|\n'
)


但是你的文本不是按照统一的分隔符分割的,实现不了.
除非你整理为统一的分隔符.

22,206

社区成员

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

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