怎样从生产数据库中获得想要的查询语句,把结果集批量插入到磁盘txt文件中

第一步:建立存储过程

      实现传入参数,生成结果到磁盘的txt文件中;

USE [XXXXX]

GO

/****** Object:  StoredProcedure [dbo].[Proc_sql_to_file]    Script Date: 2018/5/13 15:47:10 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

-- =============================================

-- Author:<Author,,Name>

-- Create date: <Create Date,,>

-- Description:<Description,华为厂商为了获取本系统数据写此存储过程,调用此过程生成txt文件保存到服务器,然后ftp到华为,>

-- =============================================

ALTER PROCEDURE [dbo].[Proc_sql_to_file](

@servername varchar(50),--服务器名

@username varchar(50),--用户名,如果用NT验证方式,则为空''

@password varchar(50) ,--密码

@sql_query varchar(2000) , --SQL查询语句,有字符条件时用单引号

@filePath_name varchar(1000), --导出路径和文件名

@date datetime --保存文件时的生成日期戳

)AS

DECLARE @sql varchar(8000)

SET @sql='bcp "'[email protected]_query + '" queryout '+' "'[email protected]_name+'_'+

convert(varchar(10),@date,21)+'.txt " /t "," /w'

+' /S '[email protected]

+CASE WHEN ISNULL(@username,'')='' THEN '' ELSE ' /U '[email protected] END

+' /P '+ISNULL(@password,'')

select @sql

EXEC master..xp_cmdshell @sql

IF @@Error<>0 BEGIN

print '生成文件时出错了,请查看!'[email protected]@Error

END

第二步:数据库中新建任务计划;

use XXXXX;---数据库名称

go

if exists(select 1 from sysobjects where name='temp11')

drop table temp11;

if exists(select 1 from sysobjects where name='temp12')

drop table temp12;

go

go

declare @date1 datetime;set @date1 =CONVERT(varchar(10),Getdate(), 21);

--华为采购数量时间为当天;

select CONVERT(varchar(100), GETDATE(), 102)+'入库串码' 手机串码,'数量' 数量,'仓库' 仓库 into temp11

union all

select

'   '+t4.FSERIALNO,convert(varchar,1) Fqty,tl.fname FstockName

from T_STK_INSTOCK  t1

inner join T_STK_INSTOCKentry t2 on t1.fid=t2.fid

inner join  T_STK_INSTOCKENTRY_F t3 on t2.fid=t3.fid

left join T_STK_INSTOCKSERIAL t4 on t3.FENTRYID=t4.FENTRYID

inner join t_bd_material_l t6 on t2.FMATERIALID=t6.FMATERIALID and t6.FLOCALEID=2052

left join T_BD_STOCK_L tl on t2.FSTOCKID=tl.FSTOCKID and tl.FLOCALEID=2052

inner join ( select distinct m.FMATERIALID,m.FCATEGORYID,w.fname from T_BD_MATERIALBASE m

join T_BD_MATERIALCATEGORY_L w on m.FCATEGORYID=w.FCATEGORYID

) u on t6.FMATERIALID=u.FMATERIALID

where u.fname like '%手机%'  and t6.fname like '%华为%'

and convert(varchar(10),t1.FDATE,21)=convert(varchar(10),getdate(),21)

--库存数量

select CONVERT(varchar(100), GETDATE(), 102)+'在库串码' 手机串码,'数量' 数量,'仓库' 仓库 into temp12

union all

SELECT   FNUMBER,convert(varchar,1) Fqty,ckl.FNAME FstockName

FROM (select FNUMBER,FSERIALID,FMATERIALID from V_BD_OVERASERIALVIEW where FSERIALID>1 and  FDOCUMENTSTATUS = 'C' AND FFORBIDSTATUS = 'A') t0

INNER   JOIN (select FSERIALID from V_BD_OVERASERIALVIEW_L where FSERIALID>1  AND FLocaleId = 2052) t0_L ON (t0.FSERIALID = t0_L.FSERIALID)

INNER    JOIN (select FSERIALID From V_BD_OVERASERIALORGVIEW where FSERIALID>1  and  FSTOCKSTATUS = 1 ) uu on uu.FSERIALID=t0.FSERIALID

inner   join (select FMATERIALID,FNAME FSPMC From t_bd_material_l where FMATERIALID>1 and FLocaleId = 2052) tll on t0.FMATERIALID =tll.FMATERIALID

INNER   join (select FCATEGORYID,FMATERIALID From T_BD_MATERIALBASE where FCATEGORYID>1 and FCATEGORYID ='2092334' ) m on t0.FMATERIALID=m.FMATERIALID

left   join (SELECT FSERIALID,MIN(FINPUTDATE) FINPUTDATE  FROM (select a.FSERIALID FSERIALID,case when b.FINPUTDATE not like '' then b.FINPUTDATE else   a.FBILLDATE

end FINPUTDATE from (select FSERIALID,FBILLDATE  From T_BD_SERIALBILLTRACE_e where FSERIALID>1 ) a  INNER   join (select FSERIALID,FINPUTDATE From T_BD_SERIALMASTEROTHER where FSERIALID>1) b on a.FSERIALID=b.FSERIALID ) a GROUP BY FSERIALID) b on t0.fserialid=b.FSERIALID

INNER   JOIN (select FSERIALID,FBILLTRACEID,FINVID from T_BD_SERIALBILLTRACE  where FBILLTRACEID>1 and FSERIALID>1 ) t5 ON T0.FSERIALID  = t5.FSERIALID  AND t5.FBILLTRACEID = (SELECT top 1 EE.FBILLTRACEID AS FBILLTRACEID FROM T_BD_SERIALBILLTRACE  EE WHERE T0.FSERIALID = EE.FSERIALID and( FINVID is not null and FINVID <> '' ) order by FBILLTRACEID desc)

inner   join (select fid,FSTOCKID,FSTOCKSTATUSID from T_STK_INVENTORY where   FSTOCKSTATUSID=10000 and FOBJECTTYPEID= 'STK_Inventory'  and FKEEPERTYPEID='BD_KeeperOrg'and FOWNERTYPEID='BD_OwnerOrg' and FISEFFECTIVED=1 and FBASEQTY<>0) inv on inv.fid=t5.FINVID

inner   join (select FSTOCKID,FNAME from T_BD_STOCK_L where FSTOCKID>1 and FLocaleId = 2052   ) ckl on inv.FSTOCKID=ckl.FSTOCKID

where FSPMC like '%华为%'

option(maxdop 0)

EXEC XXXXX..Proc_sql_to_file 'DESKTOP-89KSR2K','sa','dingweitao','select * from XXXXX.dbo.temp11','d:\k3cloud_Instock\k3cloud_Instock',@date1

EXEC XXXXX..Proc_sql_to_file 'DESKTOP-89KSR2K','sa','dingweitao','select * from XXXXX.dbo.temp12','d:\k3cloud_Inventory\k3cloud_Inventory',@date1

go

drop table temp11,temp12

go

最终每天会更新数据到文件中;

原文地址:http://blog.51cto.com/yataigp/2115704

时间: 2024-10-19 17:42:15

怎样从生产数据库中获得想要的查询语句,把结果集批量插入到磁盘txt文件中的相关文章

在项目中 将秒杀的时候锁定线程并将线程操作的ID写入txt文件中 (例子)

锁定线程,进行单线程操作的时候,应使用以下操作方法锁定: private readonly static Object thisLock = new Object(); lock (thisLock) { ... } //类 private void writeLog(Exception e) { FileStream fs = new FileStream("d:/ceshixiancheng.txt", FileMode.Append); //获得字节数组 byte[] data

C++读写TXT文件中的string或者int型数据以及string流的用法

对文件的读写操作是我们在做项目时经常用到的,在网上看了很多博客,结合自身的项目经验总结了一下,因此写了这篇博客,有些地方可能直接从别的博客中复制过来,但是都会注明出处. 一.文件的输入输出 fstream提供了三个类,用来实现c++对文件的操作.(文件的创建.读.写). ifstream -- 从已有的文件读入 ofstream -- 向文件写内容 fstream - 打开文件供读写 文件打开模式: ios::in             只读 ios::out            只写 io

利用spring batch 读取数据库中的数据写入到txt文件中

写一个job,其配置文件为: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:batch="http://www.springfram

SQL SERVER 使用BULK Insert将txt文件中的数据批量插入表中(1)

1/首先建立数据表 CREATE TABLE BasicMsg( RecvTime FLOAT NOT NULL , --接收时间,不存在时间相同的数据 AA INT NOT NULL, --24位地址码 . FlightID Varchar(10) NULL, --航班号) 2/ 建立存储过程 USE DF17DataProIF EXISTS (SELECT * FROM SYS.PROCEDURES WHERE OBJECT_ID = OBJECT_ID(N'[DBO].[BulkDataP

java将数据写入到txt文件中(txt有固定的格式)

java将数据写入到txt文件中,这个应该对于学过java I/O的人来说是很简单的事情了,但是如果要将数据以固定的格式写入到txt文件中,就需要一定的技巧了. 这里举个简单的例子,以供参考: 比如我要将数据写成下面的样子: 1      |      2      |        3       |        4 5      |      6      |        8       |        9 也许看起来很简单的,因为每个数据所代表的长度是不一样的,也有可能编码不一样,所

从txt文件中读数据画车位(2)

从txt文件中读取数据在图片上画梯形 功能说明 (1)c语言读文件的运用 (2)将从文本文件中读取的数据进行转换 (3)opencv库的使用:画梯形,画矩形 代码展示 #include <iostream> #include <opencv2/opencv.hpp> using namespace cv; using namespace std; char s[40][20] = { 0 };//用于读取文件中的每一行数据 最多读取40行 每个车位4个点(8个整形数 8行),保证够

把cmd信息中的正常和异常输出分别输出到不同txt文件中

场景一: 1.大量滚动信息容纳不下,在小黑屏中被冲刷掉. 2.希望把正常输出和异常输出分别输出到不同地方. 相关命令 一共有4个输出到文件的命令,现以jar命令打war包举例说明: 命令 说明 举例      > 正常输出覆盖指定文件  jar -xvf my.war @select.txt  > output.txt     2> 正常输出尾部追加到指定文件  jar -xvf my.war @select.txt  2> output.txt     >> 异常输出

Java导出List集合到txt文件中——(四)

有时候,需要将数据以一定格式导出到txt文件中.利用Java的IO可以轻松的导出数据到txt中. 1 package Action.txt; 2 3 import java.io.BufferedWriter; 4 import java.io.File; 5 import java.io.FileOutputStream; 6 import java.io.OutputStreamWriter; 7 import java.io.Writer; 8 import java.util.Array

根据txt文件中指定的文件名进行文件分类

根据txt文件中指定的文件名进行文件分类: // 根据txt文件中指定的文件名进行文件分类 #include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <windows.h> #include <io.h> #include <direct.h> #include <string.h> void Remove_End_Char(char a[])