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 ...
随机推荐
- Linux中的共享链接库shared libraries
可执行文件的静态链接和动态链接静态链接会将需要的库函数在编译时一并包含, 所以体积会比较大. 使用ldd命令查看可执行文件链接的库 $ ldd /sbin/ldconfig not a dynamic ...
- windows DLL中使用COM的注意事项
windows的DLL开发是有需要注意的地方的,不然会造成一些问题.由于我最近的使用不当,又造成了问题,虽然之前有写过一篇笔记, http://www.cnblogs.com/foohack/p/66 ...
- Struts2常见配置(草稿)
Struts2框架配置文件加载的顺序(了解加载配置文件的顺序,重点掌握struts.xml配置文件) 1.Struts2框架的核心是StrutsPrepareAndExecuteFilter过滤器,该 ...
- PHP 5.3版本上MS SQL Server的连接配置
折腾了好久,最后终于连接成功了! 注:我使用的的phpStudy. php.ini中配置: ;这是php中带的驱动 extension=php_sqlsrv.dll extension=php_pdo ...
- JavaScript indexOf() 方法详解
定义和用法 indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置. 语法 stringObject.indexOf(searchvalue,fromindex) 参数 描述 sea ...
- webpack window 安装loader
1.安装loadernpm install css-loader style-loader --save-dev 2.配置loader,在webpack.config.js中 module: { lo ...
- 10个很棒的学习Android 开发的网站
1. Android Developers 作为一个Android开发者,官网的资料当然不可错过,从设计,培训,指南,文档,都不应该错过,在以后的学习过程中慢慢理解体会. 2. Android Gui ...
- 【ASP.NET】ASP.NET中权限验证使用OnAuthorization实现
在项目开发中,通常我们都会涉及到用户登录才能访问的网页,比如购物网站,我们浏览商品,添加购物车(以前开发的时候在这里就需要登录用户,但是现在有了缓存的实现,这里可以将商品加入缓存,等到结账的时候再登录 ...
- 【JQuery】jquery对象和javascript对象即DOM对象相互转换
jQuery 对象是通过 jQuery 包装DOM 对象后产生的对象.jQuery 对象是 jQuery 独有的,其可以使用 jQuery 里的方法,但是不能使用 DOM 的方法:例如: $(&quo ...
- numpy.linspace()等差数列函数
在numpy中的linspace()函数类似与arange().range()函数: arange() .range() 可以通过指定开始值.终值和步长创建一维等差数组,但其数组中不包含终值 通过 ...