社区
疑难问题
帖子详情
bcp批量导入数据问题,来者有分
duanyong707
2006-04-12 04:13:33
谁能告诉我怎样批量根据多个.fmt文件创建表,并批量对多个.dat文件进行bcp数据导入
...全文
508
28
打赏
收藏
bcp批量导入数据问题,来者有分
谁能告诉我怎样批量根据多个.fmt文件创建表,并批量对多个.dat文件进行bcp数据导入
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
SQL Server中
bcp
命令的用法以及
数据
批量
导入
导出
1.
bcp
命令参数解析
bcp
命令有许多参数,下面给出
bcp
命令参数的简要解析 用法:
bcp
{dbtable | query} {in | out | queryout | format}
数据
文件 [-m 最大错误数] [-f 格式化文件] [-e 错误文件] [-F 首行] [-L 末行] ...
bcp
错误
导入
问题
解决 .
sybase
bcp
错误大全 Sybase
BCP
错误总结 一.
Bcp
错误 ct_connect(): network packet layer: internal net library error: Net-Lib protocol driver call to connect two endpoints failed Establishing connection failed
运用
BCP
导出
数据
库大
批量
数据
以及
导入
大
批量
数据
到
数据
库
当我们遇到需要把大
批量
数据
从一个
数据
库迁移到另一个
数据
库的时候,我们需要去考虑效率如何,内容是否一致等
问题
。运用微软DTS迁移
数据
,前期需要做一些配置,这个过程,有些人能费老鼻子劲才能配置成功,确实真难为人。还有些人配置完了,根据向导来到选择
数据
表或者视图页面时,勾选完大
数据
量的表,软件会有假死现象。计算以上几步都顺利,千万级的
数据
迁移完需要好几个小时,暂且不考虑网络质量、机器性能,我们已经有点不
使用
BCP
导入
导出
数据
本人第一次写原创文章 。。(一开始部分是转载 我不想累赘说很多网上有的 下面是我自己写的我遇到的
问题
)
BCP
是SQL Server中负责
导入
导出
数据
的一个命令行工具,它是基于DB-Library的,并且能以并行的方式高效地
导入
导出大
批量
的
数据
BCP
除了可以在控制台执行外,还可以通过调用SQL Server的一个系统存储过程xp_cmdshell以SQL语句的方式运行
BCP
。如:
SQL Server 增量
数据
采集与
批量
导入
实践
分享SQL Server中增量
数据
抓取与大
批量
数据
导入
操作,两个知识点:CDC及
BCP
疑难问题
22,296
社区成员
121,726
社区内容
发帖
与我相关
我的任务
疑难问题
MS-SQL Server 疑难问题
复制链接
扫一扫
分享
社区描述
MS-SQL Server 疑难问题
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章