社区
疑难问题
帖子详情
bcp批量导入数据问题,来者有分
duanyong707
2006-04-12 04:13:33
谁能告诉我怎样批量根据多个.fmt文件创建表,并批量对多个.dat文件进行bcp数据导入
...全文
491
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
命令的用法以及
数据
批量
导入
导出
本文详细解析了 SQL Server 中
bcp
命令的使用方法,包括其参数解析、常用操作及实例演示。
bcp
命令用于在 SQL Server
数据
库和
数据
文件间
批量
导入
导出
数据
,支持四种主要操作:
导入
、导出、SQL 语句导出和格式文件导出。文章还介绍了如何处理大
数据
量的
批量
导入
。
bcp
错误
导入
问题
解决 .
本文总结了Sybase
BCP
在
数据
导入
时可能出现的错误,包括网络连接失败、
数据
格式错误、字段长度不足等
问题
,并给出了相应的解决策略。同时,讨论了字符集不匹配导致的
导入
问题
及注意事项,如tempdb空间管理和
数据
库配置选项设置。对于字符集不匹配的错误,建议使用
BCP
的-Y选项进行客户端转换。
运用
BCP
导出
数据
库大
批量
数据
以及
导入
大
批量
数据
到
数据
库
本文介绍了如何使用
BCP
工具高效地从Sybase
数据
库导出大量
数据
,并
导入
到SQL Server中。通过提供具体的导出和
导入
命令,以及配置
BCP
的注意事项,如设置分隔符和信任连接,来解决大规模
数据
迁移的
问题
。同时,文章提到了在Sybase中注册服务名的方法,并建议使用批处理脚本来自动化
批量
数据
导入
过程。
使用
BCP
导入
导出
数据
本文介绍了SQL Server中的
BCP
工具用于
数据
导入
导出的操作,包括
BCP
的四种基本动作、常用选项及实际操作示例,如通过命令行和存储过程调用
BCP
,以及解决Windows身份验证时的登录
问题
。此外,还提到了其他
数据
导入
导出的方法,如OPENDATASOURCE和OPENROWSET。
SQL Server 增量
数据
采集与
批量
导入
实践
本文详细介绍了如何在SQLServer中实现增量
数据
采集,利用CDC(Change Data Capture)技术跟踪
数据
库变化,并结合Flink进行
数据
集成。同时,文章探讨了SQLServer的
批量
数据
导入
方法,包括JDBC
批量
导入
和
bcp
工具的使用,强调了
bcp
工具在
批量
导入
时的高效稳定特性。
疑难问题
22,297
社区成员
121,728
社区内容
发帖
与我相关
我的任务
疑难问题
MS-SQL Server 疑难问题
复制链接
扫一扫
分享
社区描述
MS-SQL Server 疑难问题
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章