bulk insert 在mssql中使用
从远程数据文件中批量导入
若要使用 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中使用的更多相关文章
- Bulk Insert:将文本数据(csv和txt)导入到数据库中
将文本数据导入到数据库中的方法有很多,将文本格式(csv和txt)导入到SQL Server中,bulk insert是最简单的实现方法 1,bulk insert命令,经过简化如下 BULK INS ...
- SQL SERVER 使用BULK Insert将txt文件中的数据批量插入表中(1)
1/首先建立数据表 CREATE TABLE BasicMsg( RecvTime FLOAT NOT NULL , --接收时间,不存在时间相同的数据 AA INT NOT NULL, --24位地 ...
- 如何在mssql中获取最新自增ID的值
@@IDENTITY 返回最后一个插入 IDENTITY 的值,这些操作包括:INSERT, SELECT INTO,或者 bulk copy.如果在给没有 IDENTITY 列的其他表插入记录,系统 ...
- 笔记整理之 Bulk Insert
之前2篇日志整理了BCP大致的用法,这次整理一下它的兄弟 Bulk Insert 的写法以及和bcp那边的结合的用法. 首先,Bulk Insert 语句要在连接了Sql Server 服务器之后才执 ...
- SQL Server Bulk Insert批量数据导入
SQL Server的Bulk Insert语句可以将本地或远程的数据文件批量导入到数据库中,速度非常的快.远程文件必须共享才行,文件路径须使用通用约定(UNC)名称,即"\\服务器名或IP ...
- Bulk Insert的用法 .
/******* 导出到excel */EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:/temp1.xls -c -q -S&quo ...
- SQL Server批量数据导出导入Bulk Insert使用
简介 Bulk insert命令区别于BCP命令之处在于它是SQL server脚本语句,它可以将本地或远程的文件数据批量导入数据库,速度非常之快:远程文件必须共享才行, 文件路径须使用通用约定(UN ...
- Bulk Insert命令具体
Bulk Insert命令具体 BULK INSERT以用户指定的格式复制一个数据文件至数据库表或视图中. 语法: BULK INSERT [ [ 'database_name'.][ 'owner' ...
- Bulk Insert 高效快速插入数据
BULK INSERT以用户指定的格式复制一个数据文件至数据库表或视图中. 语法: BULK INSERT [ [ 'database_name'.][ 'owner' ].]{ 'table_nam ...
随机推荐
- rtl-sdr在win7和ubuntu16.04的安装
硬件准备 RTL2832+R820T2 usb dongle x 1 Long wire antenna x 1 USB电视棒的购买: 在淘宝上搜索"软件无线电"或"rt ...
- UVa 10029 - Edit Step Ladders
題目:已知一些字典序排列的單詞,問能從中找到最大的一個有序單詞集合, 使得集合中的單詞每一個是有上一個單詞經過一次變換得來的(增.刪.改). 分析:dp,LIS.最大遞增子序列,不過數據較大须要優化. ...
- 【CAS单点登录视频教程】 第02集 -- 安装CAS
目录 ----------------------------------------- [CAS单点登录视频教程] 第06集[完] -- Cas认证 学习 票据认证FormsAuthenticati ...
- null的数据类型
Oracle的NULL代表的含义是不确定,那么不确定的东西也会有确定的数据类型吗?或者换个说法,NULL在Oracle中的默认数据类型是什么,下面就来探讨这个问题. 首先公布答案,NULL的默认类型是 ...
- DPDK架构与特点(转)
from:http://www.cnblogs.com/mylinuxer/p/4277676.html DPDK架构与特点 当年在某公司实习的时候,当时老大给了我一份DPDK的文档,说是将来很有用, ...
- 构建高性能数据库缓存之Redis(一)
一.Redis概述 1.1 什么是redis Redis是一个开源的用ANSI C编写.支持网络.基于内存.亦可持久化的日志型.Key-Value数据库,根据DB-Engines.com站点月度排行的 ...
- linux达人养成计划学习笔记(五)—— 关机和重启命令
一.shutdown 1.格式: shutdown [选项] 时间(now) 选项: -c: 取消前一个关机命令 -h: 关机 -r: 重启 2.程序放入后台执行: shutdown -r 时间 &a ...
- [bug]WCF 内存入口检查失败 Memory gates checking failed
bug描述 异常信息:内存入口检查失败,因为可用内存(xxx 字节)少于总内存的 xx%.因此,该服务不可用于传入的请求.若要解决此问题,请减少计算机上的负载,或调整 serviceHostingEn ...
- Linux增加swap空间
1.添加交换文件并设置其大小为12G,使用如下命令 # dd if=/dev/zero of=/home/swapfile bs=1024 count=12288000 12288000+0 reco ...
- C++中的成员对象
原文链接: http://blog.csdn.net/rhzwan123/article/details/2105205 [概念] 成员对象:当一个类的成员是另一个类的对象时,这个对象就叫成员对象.概 ...