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

若要使用 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. IOS中UITableview中封装九宫格

    第一步引入SecondNav目录即可 第二步引入头文件 #import "DIYTableView.h" #import "invoiceInfo.h" 实现协 ...

  2. java读取txt字符串挨个写入int数组

    int []num=new int[1001]; FileReader fr = new FileReader("1.txt"); BufferedReader br = new ...

  3. Ubuntu 13.04下安装WPS for Linux

    [日期:2013-06-03]   有人说Linux下不是有open office 和libre office么?是啊,可是将windows下的doc文档或者ppt放到Libreoffice上打开的时 ...

  4. Python字典按值排序的方法

    Python字典按值排序的方法: 法1: (默认升序排序,加  reverse = True 指定为降序排序) # sorted的结果是一个list dic1SortList = sorted( di ...

  5. 进阶之路(基础篇) - 004 I/O的模拟量输出

    /********************************* 代码功能:某输出模拟量 使用函数: analogWrite(引脚号,模拟量); //调用8位AD 创作时间:2016*10*08 ...

  6. 安装cacti

    操作介绍如下: http://foreveryan.blog.51cto.com/3508502/775558 安装如下: 英文地址:http://www.cyberciti.biz/faq/fedo ...

  7. openstack neutron 深入

    一.概述 环境说明:

  8. 安装Tomcat的Apr

    转:http://www.cnblogs.com/littlehb/archive/2013/04/02/2994785.html 安装Tomcat的Apr,提升性能 发现 Tomcat 可以用 Ap ...

  9. 【C语言】练习3-3

     题目来源:<The C programming language>中的习题P49  练习2-9: 编写函数expand(s1, s2),将字符串s1中类似于a-z一类的速记符号在字符串s ...

  10. OpenCV 学习笔记 02 处理文件、摄像头和图形用户界面

    在处理文件前需要引入OpenCV库,同时也引入unmpy库 import cv2 import numpy as np 1 基本的读写操作 1.1 图像文件的读写操作 1.1.1 图像文件的读取操作 ...