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

若要使用 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. Quartz.NET开源作业调度框架系列(二):CronTrigger-转

    CronTriggers比SimpleTrigger更加的灵活和有用,对于比较复杂的任务触发规则,例如"每个星期天的晚上12:00"进行备份任务,SimpleTrigger就不能胜 ...

  2. CentOS设置开机自动启动某服务

    CentOS设置开机自动启动某服务   这里以启动sshd服务为例:   查看sshd是否已经是系统服务:   # chkconfig --list |grep sshd 会显示:  sshd     ...

  3. HTTP代理服务器

    一.什么是代理服务器 代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息.形象的说:它是网络信息的中转站. 在一般情况下,我们使用网络浏览器直接去连接其他Interne ...

  4. Linux-非结构化数据同步-Linux下Rsync+Rsync实现非结构化增量差异数据的同步2

    说明: 操作系统:CentOS 5.X 源服务器:192.168.21.129 目标服务器:192.168.21.127,192.168.21.128 目的:把源服务器上/home/www.osyun ...

  5. VS2010编译Boost 1.56

    (1)首先下载源代码:http://softlayer-dal.dl.sourceforge.net/project/boost/boost/1.56.0/boost_1_56_0.zip 解压到某个 ...

  6. 【Java】解析Java对XML的操作

    目录结构: contents structure [+] 什么是XML 解析XML 使用DOM解析 使用SAX解析 使用PULL解析 使用dom4j解析xml dom4j的部分API 打印一个XML文 ...

  7. Mac 重建 Spotlight 索引

    前言 最近发现很多 mac 用户反映自己的 mac 系统显示内存占用高达 200 多 Gb,可是实际上自己下载的应用程序根本没那么多,使用专业的内存扫描工具扫的结果跟系统本身显示的完全不一样.那么出现 ...

  8. python 生成图表

    python写入excel(xlswriter)--生成图表 折线图 # -*- coding:utf-8 -*- import xlsxwriter # 创建一个excel workbook = x ...

  9. Linux中断 - 综述

    一.前言 一个合格的linux驱动工程师需要对kernel中的中断子系统有深刻的理解,只有这样,在写具体driver的时候才能: 1.正确的使用linux kernel提供的的API,例如最著名的re ...

  10. ARGB和PARGB

    原文链接: http://blog.csdn.net/lnwaycool/article/details/8610313 ARGB和PARGB是针对32位图像而言的,Windows下图像可以是1位.4 ...