`
Donald_Draper
  • 浏览: 950821 次
社区版块
存档分类
最新评论

SQL Server大表数据的导出与导入命令BCP

阅读更多
SQLServer备份还原命令Sqlcmd,osql,iSql使用:http://lzh166.iteye.com/blog/1123995
SQL Server BCP使用小结:http://www.cnblogs.com/qanholas/archive/2011/07/05/2098616.html
     上面的文章已将有相关命令的使用,我们这边文章主要解决表记录数比较大的情况,比如300万记录,生成SQL脚本文件大小1.6G,用SQL Server Management Studio无法执行文件太大,用navicat跑脚本out of memery,用editPlus编辑,file too large,用UltrEdit编辑,速度慢,想用SQLDumpSplitter分割Sql文件,无效,真实愚蠢的想法。所以只能使用命令了。
1、SQLCMD
SQLCMD 允许在Windows命令窗中通过命令行提示符运行脚本.
语法如下:
C:\Users\donald>sqlcmd -?
Microsoft (R) SQL Server 命令行工具
版本 10.50.1600.1 NT x64
版权所有 (c) Microsoft Corporation。保留所有权利。

用法: Sqlcmd            [-U 登录 ID]          [-P 密码]
  [-S 服务器]            [-H 主机名]          [-E 可信连接]
  [-N 加密连接][-C 信任服务器证书]
  [-d 使用数据库名称] [-l 登录超时值]     [-t 查询超时值]
  [-h 标题]           [-s 列分隔符]      [-w 屏幕宽度]
  [-a 数据包大小]        [-e 回显输入]        [-I 允许带引号的标识符]
  [-c 命令结束]            [-L[c] 列出服务器[清除输出]]
  [-q "命令行查询"]   [-Q "命令行查询" 并退出]
  [-m 错误级别]        [-V 严重级别]     [-W 删除尾随空格]
  [-u unicode 输出]    [-r[0|1] 发送到 stderr 的消息]
  [-i 输入文件]         [-o 输出文件]        [-z 新密码]
  [-f <代码页> | i:<代码页>[,o:<代码页>]] [-Z 新建密码并退出]
  [-k[1|2] 删除[替换]控制字符]
  [-y 可变长度类型显示宽度]
  [-Y 固定长度类型显示宽度]
  [-p[1] 打印统计信息[冒号格式]]
  [-R 使用客户端区域设置]
  [-b 出错时中止批处理]
  [-v 变量 = "值"...]  [-A 专用管理连接]
  [-X[1] 禁用命令、启动脚本、环境变量[并退出]]
  [-x 禁用变量替换]
  [-? 显示语法摘要]

C:\Users\donald>

实例:
执行sql脚本(导入数据):
sqlcmd  -S  localhost -U sa -P 123456   -i "E:\user.sql"

导入显示sql脚本文件错误,奶奶的不行。

2.OSQL
以下是OSQL命令的参数说明:
C:\Users\donald>osql -?
Microsoft (R) SQL Server 命令行工具
版本 10.50.1600.1 NT x64
版权所有 (c) Microsoft Corporation。保留所有权利。

注意: osql 并不支持 SQL Server 2008 R2的所有功能。
请使用 sqlcmd。有关详细信息,请参阅 SQL Server 联机丛书。
用法: osql                   [-U 登录 ID]          [-P 密码]
  [-S 服务器]                [-H 主机名]           [-E 可信连接]
  [-d 使用数据库名称]        [-l 登录超时值]       [-t 查询超时值]
  [-h 标题]                  [-s 列分隔符]         [-w 列宽]
  [-a 数据包大小]            [-e 回显输入]         [-I 允许带引号的标识符]
  [-L 列出服务器]            [-c 命令结束]         [-D ODBC DSN 名称]
  [-q "命令行查询"]          [-Q "命令行查询" 并退出]
  [-n 删除编号方式]          [-m 错误级别]
  [-r 发送到 stderr 的消息]  [-V 严重级别]
  [-i 输入文件]              [-o 输出文件]
  [-p 打印统计信息]          [-b 出错时中止批处理]
  [-X[1] 禁用命令,[退出的同时显示警告]]
  [-O 使用旧 ISQL 行为禁用下列项]
      <EOF> 批处理
      自动调整控制台宽度
      宽消息
      默认错误级别为 -1 和 1
  [-? 显示语法摘要]

例子:
osql -E  -i "E:\user.sql"

这个导入时间过长,小一点的表可以导入成功,执行过程中遇到如下错误:
对象名 'dbo.test' 无效:http://blog.csdn.net/zhangfy1015/article/details/51690316

3.BCP不利用格式化文件的导入导出命令,用于处理大表数据

C:\Users\donald>bcp -?
usage: bcp [[database_name.]owner.]table_name[:slice_number] {in | out} datafile
        [-m maxerrors] [-f formatfile] [-e errfile]
        [-F firstrow] [-L lastrow] [-b batchsize]
        [-n] [-c] [-t field_terminator] [-r row_terminator]
        [-U username] [-P password] [-I interfaces_file] [-S server]
        [-a display_charset] [-q datafile_charset] [-z language] [-v]
        [-A packet size] [-J client character set]
        [-T text or image size] [-E] [-g id_start_value] [-N] [-X]
        [-M LabelName LabelValue] [-labeled]
        [-K keytab_file] [-R remote_server_principal]
        [-V [security_options]] [-Z security_mechanism] [-Q]

C:\Users\donald>

命令实例:
--导出
bcp test.dbo.user out  E:\user.txt -c -T   

--导入
bcp test.dbo.user  in E:\user.txt -c -T


实战:
--导出数据
(c) 2016 Microsoft Corporation。保留所有权利。

C:\Users\donald>bcp test.dbo.user out  E:\user.txt -c -T


开始复制...

已复制 2648040 行。
网络数据包大小(字节): 4096
总时钟时间(毫秒)     : 25643   平均值: (每秒 105921.56 行。)
生成的txt文件只有400M左右。

--导入数据
C:\Users\donald>bcp test.dbo.user  in E:\user.txt -c -T


开始复制...
..
已向 SQL Server 发送了 1000 行。总共发送了: 2643000
已向 SQL Server 发送了 1000 行。总共发送了: 2644000
已向 SQL Server 发送了 1000 行。总共发送了: 2645000
SQLState = 22003, NativeError = 0
...
Error = [Microsoft][SQL Server Native Client 10.0]数值超出范围
已向 SQL Server 发送了 1000 行。总共发送了: 2646000
已向 SQL Server 发送了 1000 行。总共发送了: 2647000
SQLState = 22001, NativeError = 0
Error = [Microsoft][SQL Server Native Client 10.0]字符串数据,右截断

已复制 2648040 行。
网络数据包大小(字节): 4096
总时钟时间(毫秒)     : 52196   平均值: (每秒 50738.46 行。)

C:\Users\donald>
遇到如下错误
CTLIB Message:  - L6/O8/S5/N3/5/0:
ct_connect(): directory service layer: internal directory control layer error: Requested server name not found.
Establishing connection failed.
解决方式:
http://blog.sina.com.cn/s/blog_5ceb51480101gs4j.html
---分析原因
我的系统中之前安装了Sybase数据库,而SQLSERVER数据库是在Sybase之后装的,
这样就导致了SQLSERVER对应的环境变量在Sybase之后了,在执行BCP命令时,
系统首先找到的BCP是Sybase的BCP,而不是SQLSERVER的。用Sybase的BCP往SQLSERVER中导数据当然会有问题。
----解决方法
在PATH环境变量中将所有涉及SQL Server的环境变量提到Sybase之前,这样就可以了。
看来windows的环境变量也有先后优先级之分,在之后的应用中得引以注意。
总结:
对于大表数据的导入与导出用BCP命令,不利用格式化文件的导入导出数据;
OSQL主要可以处理SQL脚本文件类型的数据。bcp可能会有数据丢失呀,我测试的每个表丢失了1条记录,难道是我操作错误?

0
2
分享到:
评论

相关推荐

    bcp—SQLServer命令行数据导入导出工具使用总结.txt

    bcp是微软SQLServer数据库系统的命令行工具,用于进行大数据量的导入导出,该工具简单实用、效率极高,本文总结了bcp命令操作的各种设置开关功能含义和使用方法,可以为需要的用户提供有益帮助。

    SQL_Server数据导入导出工具BCP详解

    SQLServer 数据 导入导出 BCP详解。。。。。。。。。

    BCP命令导入导出数据

    BCP批量导入excel数据到sqlserver相关资料整理

    sqlserver bcp(数据导入导出工具)一般用法与命令详解

    bcp是SQL Server中负责导入导出数据的一个命令行工具,它是基于DB-Library的,并且能以并行的方式高效地导入导出大批量的数据。bcp可以将数据库的表或视图直接导出,也能通过SELECT FROM语句对表或视图进行过滤后...

    sql server数据导入导出

    sql server数据导入导出 指定要连接的SQL Server服务器的实例,如果未指定此选项,bcp连接本机的SQL Server默认实例。如果要连接某台机器上的默认实例,只需要指定机器名即可。

    bcp导入导出数据

    bcp导入导出SQL Server和Sybase数据库数据

    sql server 中 BCP使用方法详解

    sql server 中 BCP使用方法详解,快速从SQL SERVER中导入导出数据的命令

    sql server 2008 导入导出数据大全

    sql server 2008 导入导出数据大全 /******* 导出到excelEXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q - S"GNETDATA/GNETDATA" -U"sa" -P""' /*********** 导入ExcelSELECT * ...

    SQL Server中导入导出数据三方法比较

    在SQL Server中主要有三种方式导入导出数据:使用Transact-SQL对数据进行处理;调用命令行工具BCP处理数据;使用数据转换服务(DTS)对数据进行处理。这三种方法各有其特点,下面就它们的主要特点进行比较。

    Sql Server数据库BCP导入导出工具

    数据导出:在ServerDbConfig.cfg文件里配置好数据库访问所需要的信息,在sql文件下配置好要导出的SqlFiles,执行批处理DBUpdator_Normal.bat,就可以获得导出数据的文本形式,同样的配置导入工具的相关信息,...

    SQLServer导出数据到MySQL实例介绍

    1从SQLServer导出数据 执行BCP: bcp “…” queryout “F:\test.txt” -c –S1.2.3.4 -Usa -P1111 命令参数含义: (1) 导入。 这个动作使用in命令完成,后面跟需要导入的文件名。 (2) 导出。 这个动作使用out命令...

    BCP数据导入导出实例讲解

    批量复制程序(BCP)是Microsoft SQL Server中的一个命令行实用程序。使用BCP,我们可以导入并可从SQL Server数据库中快速而轻松地导出数据。任何使用这个功能的数据库管理员都承认BCP是一个关键工具。

    SQL Server中将数据导出为XML和Json方法分享

    这种需求对于SSIS来说当然是非常简单,但很多时候仅仅需要一次性导出这些数据而建立一个SSIS包就显得小题大做,而SQL Server的导入导出工具其中BUG还是蛮多的,最简单的办法是BCP。  数据导出为XML  在SQL Server ...

    SQL Server 2008管理员必备指南(超高清PDF)Part1

    《SQL Server 2008管理员必备指南》按照由浅入深的逻辑共分为4部分,即管理基础、系统管理、数据管理以及优化与维护。这种分类方法不仅从理论上环环相扣,全面介绍数据库管理人员需要掌握的相关理论知识和工作技能,...

    2009 年度十大 SQL Server 技巧文章

    微软SQL Server中的批量复制程序(Bulk Copy Program,BCP)能让数据库管理员将数据批量导入表中或将数据从表中批量导入文档中。它还支持一些定义数据如何导出、导入到什么地方、加载哪些数据等选项。  用bcp工具...

    在SQL Server中将数据导出为XML和Json的方法

    这种需求对于SSIS来说当然是非常简单,但很多时候仅仅需要一次性导出这些数据而建立一个SSIS包就显得小题大做,而SQL Server的导入导出工具其中BUG还是蛮多的,最简单的办法是BCP。   数据导出为XML  在SQL Server...

    SQL SERVER 2000开发与管理应用实例

    涉及安装和配置SQL Server、日期处理、字符处理、排序规则、编号处理、数据统计与汇总、分页处理、树形数据处理、数据导入与导出、作业、数据备份与还原、用户定义数据类型、数据库安全、系统表应用实例、SQL Server...

    SQL Server 2008管理员必备指南(超高清PDF)Part3

    《SQL Server 2008管理员必备指南》按照由浅入深的逻辑共分为4部分,即管理基础、系统管理、数据管理以及优化与维护。这种分类方法不仅从理论上环环相扣,全面介绍数据库管理人员需要掌握的相关理论知识和工作技能,...

    SQL Server 2008管理员必备指南(超高清PDF)Part2

    《SQL Server 2008管理员必备指南》按照由浅入深的逻辑共分为4部分,即管理基础、系统管理、数据管理以及优化与维护。这种分类方法不仅从理论上环环相扣,全面介绍数据库管理人员需要掌握的相关理论知识和工作技能,...

Global site tag (gtag.js) - Google Analytics