存储过程导出csv文件,利用xml对csv文件内容进行批量处理
来源:互联网 发布:java接口测试工具 编辑:程序博客网 时间:2024/05/29 10:56
参考文章:
Bcp使用心得: http://www.cnblogs.com/puke/archive/2013/06/05/3119378.html
定时导出csv文件: http://www.dearda.com/index.php/archives/1283
导出csv文件
A 全局临时表
if OBJECT_ID('tempdb..##table') is not nulldrop table ##table/**S1 创建全局临时表*/create table ##table(A varchar(32),B numeric(10,2),C numeric(10,2),D integer)/**S2 插入全局临时表##table*/insert ##table(A,B,C,D)select A,B,cast(0 as numeric),--强制转换成numeric0from tableNamewhere sthgroup by sth/**S4 返回结果*/select * from ##table---导出csv文件EXEC master..xp_cmdshell 'bcp "select * from tempdb..##table" queryout "D:\test.csv" -c -q -S"服务器地址" -U"用户名" -P"密码"'
注:临时表为temdb..#table ;全局临时表为tempdb.##table;此处临时表报错,需要用全局临时表
输出的csv表名设成当前日期的话 可以这样做
declare @bcp varchar(255)set @bcp='bcp "select * from tempdb..##table" queryout "D:'+convert(char(8),GETDATE(),112)+'.csv" -c -q -S"1.1.1" -U"sa" -P"1"'EXEC master..xp_cmdshell @bcp注: 此时不能设@bcp为varchar(max)
http://blog.csdn.net/imlmy/article/details/23933007
导出的csv文件在-S后面的服务器地址里面的D盘找得到
B 已经存在的表
EXEC master..xp_cmdshell 'bcp "select * from 数据库名.dbo.表名" queryout "D:\test.csv" -c -q -S"服务器地址" -U"用户名" -P"密码"'
读取csv文件
var filePath = @"D:\test.csv"; //判断是否有该文件 if (!System.IO.File.Exists(filePath)) { flag = false; return Json(new { Result = false, Message = "csv文件不存在!", Flag = flag }, JsonRequestBehavior.AllowGet); } //当有文件的时候 对csv文件内容进行处理 FileStream fs = new FileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read); StreamReader sr = new StreamReader(fs, Encoding.UTF8); //csv中每一行的数据 string strLine = ""; //记录每行中各字段的内容 string[] aryLine = null; IList<tableName> ioList = new List<tableName>(); while ((strLine = sr.ReadLine()) != null) { /// TODO 需要查看下载的csv是否有标题 aryLine = strLine.Split('\t'); if (aryLine[2] != "0" && aryLine[2] != "0" && aryLine[3] != "0") { tableName IO = new tableName(); IO.A = aryLine[0]; IO.B = Convert.ToDecimal(aryLine[1]); IO.C = Convert.ToDecimal(aryLine[2]); IO.D = Convert.ToInt32(aryLine[3]); ioList.Add(IO); } } sr.Close(); fs.Close();
注:此处为读取本地csv文件,远程服务器上文件的读取比较复杂,需要调查一下
存储过程中对csv文件进行操作
写成xml文件形式传入存储过程
//将List写成xml文件形式 StringBuilder xml = new StringBuilder(); xml.Append("<InOut>"); foreach (var item in list) { xml.Append("<R>"); xml.Append(string.Format("<A>" + item.AgentID + "</A>")); xml.Append(string.Format("<B>" + item.OpenCharge + "</B>")); xml.Append(string.Format("<C>" + item.CloseCharge + "</C>")); xml.Append(string.Format("<D>" + item.Customers + "</D>")); xml.Append("</R>"); } xml.Append("</InOut>");传入存储过程
/**S1 创建临时表*/create table #table(A varchar(32),B numeric(10,2),C numeric(10,2),D integer)/**S2 插入临时表数据*/--xml文件为空时返回if(@XML is null or LEN(LTRIM(RTRIM(@XML)))=0)RETURN--将xml中数据插入到临时表中declare @IdHandel intexec sp_xml_preparedocument @IdHandel OUTPUT,@XML insert #table(A,B,C,D) select*fromopenxml(@IdHandel,'/InOut/R',2)with(A varchar(32),B numeric(10,2),C numeric(10,2),D integer) exec sp_xml_removedocument @IdHandelset @totalCount=0使用游标进行重复操作
--循环while @@FETCH_STATUS<>-1--FETCH 语句失败或此行不在结果集中beginif(@@FETCH_STATUS<>-2)--被提取的行不存在begin trybegin tran --事务if(STH) begin --操作 endcommit tranend trybegin catchif(@@TRANCOUNT>0)beginrollback tranendend catchfetch next from Nameinto @A, @B, @C, @DSET @totalCount=@totalCount+1end
0 0
- 存储过程导出csv文件,利用xml对csv文件内容进行批量处理
- 批量导出为csv文件
- nodejs利用csv导出文件
- 使用存储过程将Oracle数据批量导出为多个csv文件
- 使用存储过程将数据批量导出为多个csv文件(ORACLE)
- 使用存储过程将Oracle数据批量导出为多个csv文件
- 对CSV文件进行操作
- 对CSV文件和XML文件的处理
- 利用matlab对xml文件进行批量处理
- 利用NumPy和pandas对CSV文件进行写操作
- 批量导出表数据到CSV文件
- csv文件导出内容有逗号
- 利用python的csv库处理csv文件
- csv文件导出,excel打开乱码处理
- csv文件导出
- php导出csv文件
- PHP导出CSV文件
- mysql导出csv文件
- linux设备驱动归纳总结:1.总线、设备和驱动
- 简单代理模式 JAVA
- map遍历拿到所有值的4种方法
- HDU-1007 Quoit Design
- 二重指针
- 存储过程导出csv文件,利用xml对csv文件内容进行批量处理
- 关于Eclipse开发环境中编译器的设置
- .Net Remoting基础(二)
- 猴子3202 ACM 基础训练
- jQuery设置和获取span的内容(简单示例说明)
- Android 百度地图—反地理编码—获取当前位置附近的大厦楼宇
- Swift-属性
- linux设备驱动归纳总结:2.match.probe.remove
- 迭代和递归的区别