博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bulk insert 在mssql中使用
阅读量:4356 次
发布时间:2019-06-07

本文共 5988 字,大约阅读时间需要 19 分钟。

 

从远程数据文件中批量导入

若要使用 BULK INSERT 从其他计算机中大容量导入数据,必须在两台计算机之间共享数据文件。 指定共享数据文件时,请使用它的通用命名约定 (UNC) 名称,其一般形式为 \\服务器名\共享名\路径\文件名。 此外,用来访问该数据文件的帐户必须具有读取远程磁盘上的文件所需的权限。

首先 共享远程服务器文件夹 并设置为所有权

以下附上代码:

BULK INSERT tabletest        FROM 'D:\\20170629.txt' WITH( FIRSTROW=1, FIELDTERMINATOR = ',', --使用“,”作为列分隔符 ROWTERMINATOR = '\n', --使用“\n”作为行分隔符 KEEPNULLS , --如果有些Column没有值,设置 KEEPNULLS 选项,表示将该column设置为NULL check_constraints ) SELECT * FROM tabletest

附上存储过程的实现:

procedure [dbo].[loadData] (@p_pathname varchar(1200))asbeginset nocount off;declare @filename varchar(1200)declare @stsql nvarchar(max)if (@p_pathname='' or @p_pathname is null)    return;    set @filename=@p_pathname;set @stsql='BULK INSERT tabletest '            +' FROM '''+@filename+''''            +' WITH('            +'  FIRSTROW=1,'            +'  FIELDTERMINATOR = '','','--使用“,”作为列分隔符            +'  ROWTERMINATOR = ''\n'','--使用“\n”作为行分隔符            +'  KEEPNULLS ,  '     --如果有些Column没有值,设置 KEEPNULLS   选项,表示将该column设置为NULL            +'  check_constraints'            +' )';    /*    print(@stsql);    */exec sp_executesql         @statemnet=@stsql;                      set nocount on;end;

 下面是执行远程服务器网络上的文件

BULK INSERT  table_test        FROM '\\远程服务器名\\共享文件files\\20170727.txt'        WITH(        KEEPIDENTITY,         FIRSTROW=1,         FIELDTERMINATOR = ',', --使用“,”作为列分隔符         ROWTERMINATOR = '\n', --使用“\n”作为行分隔符         KEEPNULLS ,   --如果有些Column没有值,设置 KEEPNULLS  选项,表示将该column设置为NULL         check_constraints)

存储过程实现 传递文件路径的方法以及给服务器共享文件路径赋值

procedure [dbo].[loadData](@p_pathname varchar(1200))asbeginset nocount off;declare @filename varchar(1200)declare @stsql nvarchar(max)if (@p_pathname='' or @p_pathname is null)    return;    --如果是远程网络服务器上的文件就采用此路径传值和赋值 赋予共享的远程服务器上的文件路径  -- 程序文件部署在那一台服务器就要用那一台的名称    --去掉前两位路径D:  传值路径D:\\20170629.txt set @filename='\\远程文件服务器名+SUBSTRING(@p_pathname,3,len(@p_pathname)-2);set @stsql='BULK INSERT tabletest '            +' FROM '''+@filename+''''            +' WITH('            +'  FIRSTROW=1,'            +'  FIELDTERMINATOR = '','','--使用“,”作为列分隔符            +'  ROWTERMINATOR = ''\n'','--使用“\n”作为行分隔符            +'  KEEPNULLS ,  '     --如果有些Column没有值,设置 KEEPNULLS   选项,表示将该column设置为NULL            +'  check_constraints'            +' )';    /*    print(@stsql);    */exec sp_executesql         @statemnet=@stsql;                      set nocount on;end;

 完整的 导数据流程存储实现

procedure [dbo].[dataload]( @p_pathname varchar(1200))asbeginset nocount off;declare @filename varchar(1200)declare @stsql nvarchar(max)declare @stsqlinsert nvarchar(max)declare @stsqlDeleteTmp nvarchar(max)declare @params nvarchar(max)declare @stsqlReplace nvarchar(max)if (@p_pathname='' or @p_pathname is null)    return;--------------------------------------------------------------------------------------------------------如果是本地就采用此路径传值 D:\\files\\pay_cfm\\db_0301_20170727.txt--set @filename=@p_pathname;-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------如果是远程网络服务器上的文件就采用此路径传值和赋值 赋予共享的远程服务器上的文件路径    --\\P-2017072U\\szrpp_files\\pay_cfm\\db_0301_20170727.txt 程序文件部署在那一台服务器就要用那一台的名称 --select substring('D:\\files\\pay_cfm\\db_0201_20170721.txt',3,len('D:\\files\\pay_cfm\\db_0201_20170721.txt')-2) --去掉前两位路径\\P-2017072U\szrpp_filesset @filename='\\WIN-VMCOI88888'+SUBSTRING(@p_pathname,3,len(@p_pathname)-2);-----------------------------------------------------------------------------------------第一先导入set @stsql='BULK INSERT CfmRcdTmp '            +' FROM '''+@filename+''''            +' WITH('            +'  FIRSTROW=1,'            +'  FIELDTERMINATOR = '','','--使用“,”作为列分隔符            +'  ROWTERMINATOR = ''\n'','--使用“\n”作为行分隔符            +'  KEEPNULLS ,  '     --如果有些Column没有值,设置 KEEPNULLS   选项,表示将该column设置为NULL            +'  check_constraints'            +' )';        --print(@stsql);    --print(@stsqlinsert);--第二再存入实际库set @stsqlinsert='insert into CfmRcd(                                             ReconSource ,                                            CmfFile ,                                            CfmDate ,                                            FileNumCur ,                                            RechargeSerial ,                                            TradeSysWater ,                                            TradeTime ,                                            TradeFee ,                                            CfmStatus                                             )                                  SELECT                                                ReconSource ,                                            CmfFile ,                                            CfmDate ,                                            FileNumCur ,                                            RechargeSerial ,                                            TradeSysWater ,                                            TradeTime ,                                            TradeFee ,                                            CfmStatus                                               FROM CfmRcdTmp';--第三进行清除临时表 SET @stsqlDeleteTmp='truncate table CfmRcdTmp'; --第四再替换格式set @stsqlReplace='    update CfmRcd   set reconsource=replace(reconsource,'''''''',''''),    cmffile =replace(cmffile,'''''''',''''),    cfmdate=replace(cfmdate,'''''''',''''),    filenumcur=replace(filenumcur,'''''''',''''),    rechargeserial =replace(rechargeserial,'''''''',''''),    TradeSysWater=replace(TradeSysWater,'''''''',''''),    tradetime=replace(tradetime,'''''''',''''),    tradefee =replace(tradefee,'''''''',''''),    cfmstatus=replace(cfmstatus,'''''''','''')        ';exec sp_executesql @statemnet=@stsql;exec sp_executesql @statinsert=@stsqlinsert;         exec sp_executesql @stattruncate=@stsqlDeleteTmp;exec sp_executesql @statReplace=@stsqlReplace;                set nocount on;end;

 

转载于:https://www.cnblogs.com/Warmsunshine/p/7092944.html

你可能感兴趣的文章
char * 与char []探究理解
查看>>
QT窗体显示在屏幕中间位置
查看>>
emmet使用技巧
查看>>
RPC-Thrift(二)
查看>>
MSSQL for Linux 安装指南
查看>>
【Golang 接口自动化08】使用标准库httptest完成HTTP请求的Mock测试
查看>>
洛谷 P1036 选数
查看>>
女性社区TOP10
查看>>
BP神经网络算法推导及代码实现笔记zz
查看>>
前端必读:浏览器内部工作原理
查看>>
每天一个Linux命令(16)--which命令
查看>>
libevent文档学习(一)多线程接口和使用
查看>>
【补hackbar的坑】关于hackbar需要钱的补救措施
查看>>
纤程与Quasar
查看>>
MySQL的一个麻烦事
查看>>
Uri、URL和URN三者的区别
查看>>
数据字典的转换
查看>>
二维数组按照指定的字段排序的函数
查看>>
在IAR下通过Jlink将程序直接下载到Flash指定地址
查看>>
POJ2560-雀斑(Freckles)【图论,并查集,最小生成树,KURUSKAL】
查看>>