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

若要使用 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))
as
begin
set 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))
as
begin
set 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)
)
as
begin
set 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_files
set @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;

bulk insert 在mssql中使用的更多相关文章

  1. Bulk Insert:将文本数据(csv和txt)导入到数据库中

    将文本数据导入到数据库中的方法有很多,将文本格式(csv和txt)导入到SQL Server中,bulk insert是最简单的实现方法 1,bulk insert命令,经过简化如下 BULK INS ...

  2. SQL SERVER 使用BULK Insert将txt文件中的数据批量插入表中(1)

    1/首先建立数据表 CREATE TABLE BasicMsg( RecvTime FLOAT NOT NULL , --接收时间,不存在时间相同的数据 AA INT NOT NULL, --24位地 ...

  3. 如何在mssql中获取最新自增ID的值

    @@IDENTITY 返回最后一个插入 IDENTITY 的值,这些操作包括:INSERT, SELECT INTO,或者 bulk copy.如果在给没有 IDENTITY 列的其他表插入记录,系统 ...

  4. 笔记整理之 Bulk Insert

    之前2篇日志整理了BCP大致的用法,这次整理一下它的兄弟 Bulk Insert 的写法以及和bcp那边的结合的用法. 首先,Bulk Insert 语句要在连接了Sql Server 服务器之后才执 ...

  5. SQL Server Bulk Insert批量数据导入

    SQL Server的Bulk Insert语句可以将本地或远程的数据文件批量导入到数据库中,速度非常的快.远程文件必须共享才行,文件路径须使用通用约定(UNC)名称,即"\\服务器名或IP ...

  6. Bulk Insert的用法 .

    /******* 导出到excel */EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:/temp1.xls -c -q -S&quo ...

  7. SQL Server批量数据导出导入Bulk Insert使用

    简介 Bulk insert命令区别于BCP命令之处在于它是SQL server脚本语句,它可以将本地或远程的文件数据批量导入数据库,速度非常之快:远程文件必须共享才行, 文件路径须使用通用约定(UN ...

  8. Bulk Insert命令具体

    Bulk Insert命令具体 BULK INSERT以用户指定的格式复制一个数据文件至数据库表或视图中. 语法: BULK INSERT [ [ 'database_name'.][ 'owner' ...

  9. Bulk Insert 高效快速插入数据

    BULK INSERT以用户指定的格式复制一个数据文件至数据库表或视图中. 语法: BULK INSERT [ [ 'database_name'.][ 'owner' ].]{ 'table_nam ...

随机推荐

  1. Web前端知识体系

    看到一篇不错的文章,拿来收藏和分享. 原文:http://mp.weixin.qq.com/s/UFTfdE7LYhHquWEzwZKLCQ Web前端技术由html.css和 javascript三 ...

  2. Javascript 思维导图 绘制基础内容(值得一看)

    来源于:http://www.cnblogs.com/coco1s/p/3953653.html javascript变量 javascript运算符 javascript数组 javascript流 ...

  3. 软件申请获取root权限

      申请root的工具类 //获取root权限 RootManager manager=new RootManager(); manager.upgradeRootPermission(getPack ...

  4. Easyui入门视频教程 第03集---Easyui布局

    Easyui入门视频教程 第03集---Easyui布局 目录 ----------------------- Easyui入门视频教程 第09集---登录完善 图标自定义   Easyui入门视频教 ...

  5. 安全删除linux旧内核的方法

    我们在用yum升级系统之后,希望往往会为我们保持旧的内核文件,这样以防在出现硬件或者软件冲突的时候我们能够返回到旧的内核文件继续使用,如果我们想要安全的删除旧的内核文件,可以follow下面的方法. ...

  6. HBase Go客户端Row构造注意事项

    1. Hbase 的Go客户端语言使用方法 2. Hbase的Row使用注意事项 2.1. Row的前几个字段尽量散列 2.2. Row的排序是把所有Row中的字符做字典排序 我们最近在一个项目中使用 ...

  7. hihocoder 1638:多级并查集

    题目链接 并查集可以用于聚类. import java.io.FileInputStream; import java.io.FileNotFoundException; import java.ut ...

  8. 【DM】Combating Web Spam with TrustRank - 用TrustRank对抗网络垃圾邮件

    [论文标题]Combating Web Spam with TrustRank (Proceedings 2004 VLDB Conference) [论文作者]Zolt´an Gy¨ongyi,He ...

  9. jenkins+maven+git+ 邮件自动转发 持续化集成 图文教程

    1.所需要的插件,安装plugin ,进入mangae Jenkins→ manage Plugins, 切换到Available tab, 选择如下plugin 安装 Gitplugin, GitH ...

  10. NSOperation, NSOperationQueue 原理探析

    通过GNUstep的Foundation来尝试探索下NSOperation,NSOperationQueue 示例程序 写一个简单的程序 - (void)viewDidLoad { [super vi ...