社区
疑难问题
帖子详情
bcp批量导入数据问题,来者有分
duanyong707
2006-04-12 04:13:33
谁能告诉我怎样批量根据多个.fmt文件创建表,并批量对多个.dat文件进行bcp数据导入
...全文
448
28
打赏
收藏
bcp批量导入数据问题,来者有分
谁能告诉我怎样批量根据多个.fmt文件创建表,并批量对多个.dat文件进行bcp数据导入
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
28 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
duanyong707
2006-04-14
打赏
举报
回复
我的那个script文件不知道用什么打开,那好像是sqlserver产生的,具体怎么来的我就不知道了,谁能告诉我怎么打开这个文件,
我执行建表那段程序时候出现错误:
(所影响的行数为 7 行)
服务器: 消息 170,级别 15,状态 1,行 2
第 2 行: '@fmtfile' 附近有语法错误。
服务器: 消息 170,级别 15,状态 1,行 2
第 2 行: '@fmtfile' 附近有语法错误。
服务器: 消息 170,级别 15,状态 1,行 2
第 2 行: '@fmtfile' 附近有语法错误。
服务器: 消息 170,级别 15,状态 1,行 2
第 2 行: '@fmtfile' 附近有语法错误。
zjcxc
2006-04-14
打赏
举报
回复
如果你的sql功底不够好, 可能你较难保证比较成功的完成这次任务
zjcxc
2006-04-14
打赏
举报
回复
-- 我少写了一个,
-- 根据fmt文件建表
DECLARE @Path nvarchar(1000), @sql nvarchar(1000), @tbname sysname
SELECT @Path = 'd:\test' -- fmt 文件所在的目录
-- 导入处理
CREATE TABLE #(fname nvarchar(1000))
SET @sql = 'DIR ' + @Path + '*.fmt'
INSERT # EXEC master.dbo.xp_cmdshell @sql
IF @@ROWCOUNT = 0
RETURN
DECLARE tb CURSOR LOCAL
FOR
SELECT N'EXEC p_fmt2table @tbname = ' + QUOTENAME(LEFT(fname, LEN(fname) - 4), '''') + N'
,@fmtfile = ''' + @Path + fname + ''''
FROM #
OPEN tb
FETCH tb INTO @sql
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC(@sql)
FETCH tb INTO @sql
END
CLOSE tb
DEALLOCATE tb
DROP TABLE #
duanyong707
2006-04-13
打赏
举报
回复
这个Script.dat文件对应一个Script.spt不过是空的,这是怎么产生的
duanyong707
2006-04-13
打赏
举报
回复
现在就是没有表,是一个空库,需要建立所有的表
对了zjcxc(邹建) 大哥
文件夹里还有这个文件
Script.dat
用记事本打开内容如下好像是创建所有表的语句,
?嘟 _ O Title J WIDTH ,Script J WIDTH @ z _ t a b B Z ?C R E A T E T A B L E [ d b o ] . [ z _ t a b B Z ] (
[ S S Z T ] [ i n t ] N O T N U L L ,
[ B Z D M ] [ i n t ] N O T N U L L ,
[ B Z M C ] [ c h a r ] ( 2 0 ) N U L L ,
[ B Z J C ] [ c h a r ] ( 1 0 ) N U L L ,
[ B Z B Z ] [ c h a r ] ( 4 ) N U L L ,
[ B Z H L ] [ n u m e r i c ] ( 1 5 , 4 ) N U L L ,
[ S C B Z ] [ i n t ] N U L L
) O N [ P R I M A R Y ]
z _ t a b C Z R Z JC R E A T E T A B L E [ d b o ] . [ z _ t a b C Z R Z ] (
[ S S Z T ] [ i n t ] N U L L ,
[ C Z D M ] [ i n t ] N U L L ,
[ C Z Y H ] [ c h a r ] ( 2 0 ) N U L L ,
[ C Z R Q ] [ d a t e t i m e ] N U L L ,
[ W C Q K ] [ i n t ] N U L L
) O N [ P R I M A R Y ]
z _ t a b D Q P Z |C R E A T E T A B L E [ d b o ] . [ z _ t a b D Q P Z ] (
[ P Z D M ] [ i n t ] N O T N U L L ,
[ P Z L X ] [ i n t ] N O T N U L L ,
[ P Z L X H ] [ i n t ] N U L L ,
[ Z D S D ] [ i n t ] N U L L ,
[ Q T M K P Z ] [ i n t ] N U L L ,
[ S S Z T ] [ i n t ] N O T N U L L ,
[ P Z R Q N ] [ i n t ] N O T N U L L ,
[ P Z R Q Y ] [ i n t ] N O T N U L L ,
[ P Z R Q R ] [ i n t ] N U L L ,
[ C J Y H ] [ c h a r ] ( 2 0 ) N U L L ,
[ S H Y H ] [ c h a r ] ( 2 0 ) N U L L ,
[ S H B Z ] [ i n t ] N U L L ,
[ J Z B Z ] [ i n t ] N O T N U L L ,
[ J Z Y H ] [ c h a r ] ( 2 0 ) N U L L ,
[ F D Z S ] [ i n t ] N U L L ,
[ P Z Z Y ] 等等
vovo2000
2006-04-13
打赏
举报
回复
只要数据库中有对应的表的话,可以阿
areswang
2006-04-13
打赏
举报
回复
mark
duanyong707
2006-04-13
打赏
举报
回复
我的数据.dat和.fmt是bcp方式导出的,他就不能直接导入到一个空库里面去吗,既然能够连表格式文件都导出来,为什么不能直接恢复进空库呢
OracleRoob
2006-04-13
打赏
举报
回复
最好使用存储过程,函数不支持
如果使用代码块,就直接把存储过程中代码摘出来即可
duanyong707
2006-04-13
打赏
举报
回复
还有就是能不能不用存储过程,代码应该怎样写
vovo2000
2006-04-13
打赏
举报
回复
帮搂主顶一下,
老大就帮忙帮到底吧
xiaoku
2006-04-13
打赏
举报
回复
学习...
duanyong707
2006-04-13
打赏
举报
回复
.fmt文件的格式如下:
7.0
51
1 SQLINT 1 4 "" 1 KMND
2 SQLCHAR 0 23 "" 2 KMDM
3 SQLCHAR 0 100 "" 3 KMMC
4 SQLINT 1 4 "" 4 KMFL
5 SQLINT 0 4 "" 5 SSZT
6 SQLINT 1 4 "" 6 KMJS
7 SQLINT 1 4 "" 7 DXKM
8 SQLINT 1 4 "" 8 YEFX
9 SQLNUMERIC 1 19 "" 9 QCYE
10 SQLNUMERIC 1 19 "" 10 QCWBYE
11 SQLNUMERIC 1 19 "" 11 QCSL
12 SQLNUMERIC 1 19 "" 12 YE
13 SQLNUMERIC 1 19 "" 13 WBYE
14 SQLNUMERIC 1 19 "" 14 SL
15 SQLNUMERIC 1 19 "" 15 SCYE
16 SQLNUMERIC 1 19 "" 16 SCWBYE
17 SQLNUMERIC 1 19 "" 17 SCSL
18 SQLNUMERIC 1 19 "" 18 NCYE
19 SQLNUMERIC 1 19 "" 19 NCWBYE
20 SQLNUMERIC 1 19 "" 20 NCSL
21 SQLNUMERIC 1 19 "" 21 SSJFRFSE
22 SQLNUMERIC 1 19 "" 22 SSDFRFSE
23 SQLNUMERIC 1 19 "" 23 SSRCXFSE
24 SQLNUMERIC 1 19 "" 24 SSJFYFSE
25 SQLNUMERIC 1 19 "" 25 SSDFYFSE
26 SQLNUMERIC 1 19 "" 26 SSYCXFSE
27 SQLNUMERIC 1 19 "" 27 SSJFJFSE
28 SQLNUMERIC 1 19 "" 28 SSDFJFSE
29 SQLNUMERIC 1 19 "" 29 SSJCXFSE
30 SQLNUMERIC 1 19 "" 30 SSJFNFSE
31 SQLNUMERIC 1 19 "" 31 SSDFNFSE
32 SQLNUMERIC 1 19 "" 32 SSNCXFSE
33 SQLNUMERIC 1 19 "" 33 SSJFLFSE
34 SQLNUMERIC 1 19 "" 34 SSDFLFSE
35 SQLNUMERIC 1 19 "" 35 SSLCXFSE
36 SQLNUMERIC 1 19 "" 36 JFRFSE
37 SQLNUMERIC 1 19 "" 37 DFRFSE
38 SQLNUMERIC 1 19 "" 38 RCXFSE
39 SQLNUMERIC 1 19 "" 39 JFYFSE
40 SQLNUMERIC 1 19 "" 40 DFYFSE
41 SQLNUMERIC 1 19 "" 41 YCXFSE
42 SQLNUMERIC 1 19 "" 42 JFJFSE
43 SQLNUMERIC 1 19 "" 43 DFJFSE
44 SQLNUMERIC 1 19 "" 44 JCXFSE
45 SQLNUMERIC 1 19 "" 45 JFNFSE
46 SQLNUMERIC 1 19 "" 46 DFNFSE
47 SQLNUMERIC 1 19 "" 47 NCXFSE
48 SQLNUMERIC 1 19 "" 48 JFLFSE
49 SQLNUMERIC 1 19 "" 49 DFLFSE
50 SQLNUMERIC 1 19 "" 50 LCXFSE
51 SQLINT 1 4 "" 51 SCBZ
duanyong707
2006-04-13
打赏
举报
回复
我的这些文件是放在本地d:\test目录下的
具体的存储过程、创建表的批处理,批处理执行bcp应该怎么写
duanyong707
2006-04-13
打赏
举报
回复
太感谢你了,我的那些数据表名和.fmt .dat文件名是一致的,我对这方面不是很懂,突然领导让我做这个,我都不知道该如何下手,我是做服务的,不是做开发的,还望您能写出详细的代码
所有文件的样式如下:
z_tabCZRZ.dat
z_tabCZRZ.fmt
z_tabBZ.dat
z_tabBZ.fmt
.....
zjcxc
2006-04-13
打赏
举报
回复
-- 下面的批处理语句实现导入数据
DECLARE @Path nvarchar(1000), @sql nvarchar(1000), @tbname sysname
SELECT @Path = 'd:\test' -- fmt 文件所在的目录
-- 导入处理
CREATE TABLE #(fname nvarchar(1000))
SET @sql = 'DIR ' + @Path + '*.fmt'
INSERT # EXEC master.dbo.xp_cmdshell @sql
IF @@ROWCOUNT = 0
RETURN
DECLARE tb CURSOR LOCAL
FOR
SELECT N'BCP ' + DB_NAME() + '.dbo.' + LEFT(fname, LEN(fname) - 4)
+ N' IN "' + @Path + LEFT(fname, LEN(fname) - 4) + '.dat" '
+ N' /f"' + @Path + fname + '" /T /S"' + @@SERVERNAME + '"'
FROM #
OPEN tb
FETCH tb INTO @sql
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC master.dbo.xp_cmdshell @sql
FETCH tb INTO @sql
END
CLOSE tb
DEALLOCATE tb
DROP TABLE #
zjcxc
2006-04-13
打赏
举报
回复
如果不管那个script文件, 则下面的批处理实现根据 fmt 文件建表
当然, 在执行下面的语句之前, 你要执行之前我帖出的那个存储过程的代码创建存储过程
(不然根据fmt文件建表的语句会写得很复杂)
-- 根据fmt文件建表
DECLARE @Path nvarchar(1000), @sql nvarchar(1000), @tbname sysname
SELECT @Path = 'd:\test' -- fmt 文件所在的目录
-- 导入处理
CREATE TABLE #(fname nvarchar(1000))
SET @sql = 'DIR ' + @Path + '*.fmt'
INSERT # EXEC master.dbo.xp_cmdshell @sql
IF @@ROWCOUNT = 0
RETURN
DECLARE tb CURSOR LOCAL
FOR
SELECT N'EXEC p_fmt2table @tbname = ' + QUOTENAME(LEFT(fname, LEN(fname) - 4), '''') + N'
@fmtfile = ''' + @Path + fname + ''''
FROM #
OPEN tb
FETCH tb INTO @sql
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC(@sql)
FETCH tb INTO @sql
END
CLOSE tb
DEALLOCATE tb
DROP TABLE #
yellow1234
2006-04-13
打赏
举报
回复
学习 :)
xeqtr1982
2006-04-13
打赏
举报
回复
学习 :)
zjcxc
2006-04-13
打赏
举报
回复
你帖出的这个脚本有点怪, 估计是你用来打开这个脚本文件的工具不太对, 所以编码格式有些问题.
加载更多回复(8)
BCP
数据
导入
导出实例讲解
批量
复制程序(
BCP
)是Microsoft SQL Server中的一个命令行实用程序。使用
BCP
,我们可以
导入
并可从SQL Server
数据
库中快速而轻松地导出
数据
。任何使用这个功能的
数据
库管理员都承认
BCP
是一个关键工具。
Sybase
bcp
工具
Sybase
bcp
(Bulk Copy Program)是Sybase
数据
库系统提供的一种强大工具,用于高效地
批量
导入
和导出
数据
。它允许用户在
数据
库和外部文件之间进行大规模的
数据
传输,极大地提高了
数据
操作的效率。在本文中,我们将...
使用
bcp
批量
导入
数据
时碰到的一些
问题
及解决
因为是初次使用
bcp
来初次
导入
数据
,有些地方难免有些摸不着门道,碰了几次鼻子后,大约弄懂了一点,但是还是比较片面见识,甚至可能还有些错误之处,斗胆拿出来晒晒。 Code 先期准备:生成一个新表 createtable...
用
bcp
导入
大量
数据
(代替INSERT)
之前用
BCP
批量
导出
导入
数据
的时候, 就想到自己构造
bcp
的
数据
,然后
批量
导入
, 速度非常快, 每秒至少几万行~几十万行的
数据
。 构造
bcp
数据
的过程很简单, 写段C#代码, 产生一个txt文件,不过需要注意一下...
利用
bcp
批量
导入
指定文件夹下CSV
数据
到sql server
指定好文件夹后,读取文件夹和子文件夹下所有csv文件,利用
bcp
批量
导入
CSV
数据
到sql server
疑难问题
22,299
社区成员
121,733
社区内容
发帖
与我相关
我的任务
疑难问题
MS-SQL Server 疑难问题
复制链接
扫一扫
分享
社区描述
MS-SQL Server 疑难问题
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章