• BCP笔记整理(二)


    BCP的基础用法可以参考上一篇:http://www.cnblogs.com/Gin-23333/p/5489889.html

    这篇是补充一些有可能会用到,但是出场几率并不算大的几个参数

    1、首先是 -F -L ,形象生动的来说就是 FirstRow 和LastRow 的参数,比如以下例子(测试的表用回之前那个)

    ID          name                                               Chinese     Math
    ----------- -------------------------------------------------- ----------- -----------
    1           张三                                                 90          80
    2           李四                                                 75          90
    3           王五                                                 68          100
    4           赵六                                                 100         NULL
    5           うずまき ナルト                                           59          80

    然后配合这个测试语句导出导入数据

    exec sys.xp_cmdshell 'bcp test.dbo.t3 out D:	3 -S GINLATOPMSSQLSERVER2016 -T -c'
    exec sys.xp_cmdshell 'bcp test.dbo.t4 in D:	3 -S GINLATOPMSSQLSERVER2016 -T -c -F 2 -L 4'
    
    select * from t4
    ID          name                                               Chinese     Math
    ----------- -------------------------------------------------- ----------- -----------
    1           李四                                                 75          90
    2           王五                                                 68          100
    3           赵六                                                 100         -1

    对比原来t3的数据,先不要对正 ID列,看下数据行数,-F 和 -L 的参数意义是从第几行还是,截至到第几行,和平时类似使用的 offset next 和 limit 1,1 这些不一样。这个在导数据的时候需要注意一下。

    2、关于标识列的去留。对于上面一个例子,虽然导出的数据是存在ID列的,但是导入的时候却跟原本的ID列的值不一致。在BCP里面也是可以处理,使用-E 参数来进行控制

    exec sys.xp_cmdshell 'bcp test.dbo.t3 out D:	3 -S GINLATOPMSSQLSERVER2016 -T -c'
    exec sys.xp_cmdshell 'bcp test.dbo.t4 in D:	3 -S GINLATOPMSSQLSERVER2016 -T -c -E -F 2 -L 4'
    
    select * from t4
    
    ID          name                                               Chinese     Math
    ----------- -------------------------------------------------- ----------- -----------
    2           李四                                                 75          90
    3           王五                                                 68          100
    4           赵六                                                 100         -1

    如上面例子所显示,原本t3的标识列已经带到t4里面。

    3、处理默认值的用法,导出/导入数据的时候,导入到新表的时候,如果对应的值为null,那么如果导入的对应列存在默认值,则会插入默认值。如果要保持Null 值则可以用-k 的参数

    修改一下表对象,往里面的Math 字段添加一个默认值
    alter table t4 add constraint DF_t4_Math default -1 for Math
    --保留数据Null值不填充默认值
    exec sys.xp_cmdshell 'bcp test.dbo.t4 in D:	3 -S GINLATOPMSSQLSERVER2016 -T -c '
    exec sys.xp_cmdshell 'bcp test.dbo.t4 in D:	3 -S GINLATOPMSSQLSERVER2016 -T -c '
    ID          name                                               Chinese     Math
    ----------- -------------------------------------------------- ----------- -----------
    1           张三                                                 90          80
    2           李四                                                 75          90
    3           王五                                                 68          100
    4           赵六                                                 100         -1
    5           うずまき ナルト                                           59          80
    
    
    
    exec sys.xp_cmdshell 'bcp test.dbo.t4 in D:	3 -S GINLATOPMSSQLSERVER2016 -T -c -k'
    ID          name                                               Chinese     Math
    ----------- -------------------------------------------------- ----------- -----------
    1           张三                                                 90          80
    2           李四                                                 75          90
    3           王五                                                 68          100
    4           赵六                                                 100         NULL
    5           うずまき ナルト                                           59          80

    虽然说可以指定是否保留导入数据的Null值,但是要说明一点,如果存在多列有默认值的列,目前的版本在导入的时候要么选择全部取默认值,要么全部保留Null值,不能A列使用默认值而B列保留空,这个需要留意一下

    4、BatchSize 这个也挺好用。 -b 参数,相当于每次导出/导入多少条数据。这样的好处是当数据量很大的时候,假如途中出错,在出错的前面批次的数据都可以正常导入,将不会影响之前导入的数据。

    --每个批次传入的数据行数
    exec sys.xp_cmdshell 'bcp test.dbo.t4 in D:	3 -S GINLATOPMSSQLSERVER2016 -T -c -b 1'
    exec sys.xp_cmdshell 'bcp test.dbo.t4 in D:	3 -S GINLATOPMSSQLSERVER2016 -T -c -b 1'
    
    output
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    NULL
    开始复制...
    已向 SQL Server 发送了 1 行。总共发送了: 1
    已向 SQL Server 发送了 1 行。总共发送了: 2
    已向 SQL Server 发送了 1 行。总共发送了: 3
    已向 SQL Server 发送了 1 行。总共发送了: 4
    已向 SQL Server 发送了 1 行。总共发送了: 5
    NULL
    已复制 5 行。
    网络数据包大小(字节): 4096
    总时钟时间(毫秒)     : 1      平均值: (每秒 5000.00 行。)
    NULL

    5条数据分开了5次进行发送,这个就是-b 的作用。

  • 相关阅读:
    科学计算三维可视化---Mlab基础(基于Numpy数组的绘图函数)
    科学计算三维可视化---Mayavi入门(Mayavi管线)
    科学计算三维可视化---Mayavi入门(Mayavi库的基本元素和绘图实例)
    科学计算三维可视化---Mayavi入门(Mayavi介绍和安装)
    科学计算三维可视化---TVTK库可视化实例
    科学计算三维可视化---TVTK入门(数据加载)
    科学计算三维可视化---TVTK管线与数据加载(数据集)
    科学计算三维可视化---TVTK管线与数据加载(用IVTK根据观察管线)
    科学计算三维可视化---TVTK管线与数据加载(可视化管线和图像管线了解)
    目前已经知道的乐视所有产品各个型号的强刷方法!更新X50
  • 原文地址:https://www.cnblogs.com/Gin-23333/p/5498382.html
Copyright © 2020-2023  润新知