sql server 文件夹下的所有txt文件内容导入到数据库表中;远程备份到服务器

--创建集团数据临时表,保存jt_*.txt格式中的数据
CREATE TABLE TBL_TEMP_JT
(
GROUP_CODE VARCHAR(60),
GROUP_Name VARCHAR(128),
BUISNESS_TYPE_NAME VARCHAR(60),
SERVICE_USER VARCHAR(60),
CREATE_DATE VARCHAR(60),
BELONG_REGION VARCHAR(100),
BELONG_AREA VARCHAR(100),
ACCOUNT_MANAGER VARCHAR(60)
)
--创建集团产品临时表,保存jtcp_*.txt格式中的数据
-----注意:一些列不确定是那个表中的列,命名为 L* 
CREATE TABLE TBL_TEMP_JTCP
(
GROUP_CODE VARCHAR(60),
PRODUCT_CODE VARCHAR(60),
PRODUCT_TYPE_NAME VARCHAR(60),
GROUP_Name VARCHAR(128),
L1 VARCHAR(60),
SERVICE_USER VARCHAR(60),
CREATE_DATE VARCHAR(60),
L2 VARCHAR(60),
L3 VARCHAR(60),
L4 VARCHAR(60)
)

--导入处理
declare    @path  nvarchar(266)  
set  @path='\\192.168.0.42\11daoru 1qaz432!/user:192.168.0.42\ftp2'            
 
--得到该目录下的所有文件  
if  right(@path,1)<>'\'  set  @path=@path+'\'  
create  table  #t(fn  nvarchar(1000),depth  int,isfile  int)  
insert  #t  exec  czyd..xp_dirtree  @path=@path,@depth=1,@file=1  
--定义游标,逐个导入文件  
declare  @s  varchar(8000)  
declare  tb  cursor  local  for  
select  'bulk  insert  '  
           +case    
               when  fn  like  'jtcp_%.txt'  
               then  'TBL_TEMP_JTCP from '''+@path+fn+'''  with (FIELDTERMINATOR =''|' 
               else  'TBL_TEMP_JT from '''+@path+fn+'''  with (FIELDTERMINATOR = ''|'
          end+''')'  
from  #t    
where  isfile=1    
           and  fn  not  in('jt_bcp.txt','jtcp_bcp.txt')  
           and  (fn  like  'jt_%.txt'  or  fn  like  'jtcp_%.txt')  
 
open  tb  
fetch  tb  into  @s  
while  @@fetch_status=0  
begin  
           exec(@s)  
           fetch  tb  into  @s  
end  
close  tb  
deallocate  tb  
drop  table  #t
 
-------------------------------------------------------
-----导入集团工单数据
-----导入数据到 tbl_group_buisness_info 集团工单表
-----导入数据到 tbl_group_data 集团工单数据表
-------------------------------------------------------
declare 
@GROUP_CODE VARCHAR(60),
@GROUP_Name VARCHAR(128),
@BUISNESS_TYPE_NAME VARCHAR(60),
@SERVICE_USER VARCHAR(60),
@CREATE_DATE VARCHAR(60),
@BELONG_REGION VARCHAR(100),
@BELONG_AREA VARCHAR(100),
@ACCOUNT_MANAGER VARCHAR(60),
@BUISNESS_TYPE_ID VARCHAR(10),
@BRANCH_ID VARCHAR(10);
declare cr_cursor cursor --1.定义游标
for 
-----------------------从tbl_temp_jt表中查询数据
select t.GROUP_CODE,t.GROUP_Name,t.BUISNESS_TYPE_NAME,t.SERVICE_USER,t.CREATE_DATE,t.BELONG_REGION,t.BELONG_AREA,t.ACCOUNT_MANAGER,b.id ,r.id
from tbl_temp_jt t left join tbl_group_business_type b 
on t.BUISNESS_TYPE_NAME = b.name
left join T_BRANCH r on t.BELONG_REGION = r.name
open cr_cursor --2.打开游标
--3.提取游标
fetch From cr_cursor into @GROUP_CODE,@GROUP_Name,@BUISNESS_TYPE_NAME,@SERVICE_USER,@CREATE_DATE,@BELONG_REGION,@BELONG_AREA,@ACCOUNT_MANAGER,@BUISNESS_TYPE_ID,@BRANCH_ID 
while @@fetch_status=0
begin
--将结果打印到控制台
print @GROUP_CODE
print @GROUP_Name
print @BUISNESS_TYPE_NAME
print @SERVICE_USER
print @CREATE_DATE
print @BELONG_REGION
print @BELONG_AREA
print @ACCOUNT_MANAGER
print @BUISNESS_TYPE_ID
print @BRANCH_ID
----导入到 tbl_group_buisness_info 集团工单表
insert into TEST01(group_code,BUISNESS_TYPE,MATERIAL_TYPE,ACCOUNT_MANAGER,PROCESS_DATE,HAS_SIGNATURE,PROTOCOL_USER,PROCEDURE_IS_ALL,MATERIRL_IS_ALL,CHECK_FLAG,STATE,IMAGE_STATE,BRANCH_ID,AUDITS_PERSON,befrom)
values(@GROUP_CODE,@BUISNESS_TYPE_ID,'0',@ACCOUNT_MANAGER,@CREATE_DATE,'0',@SERVICE_USER,'0','0','1','1','1',@BRANCH_ID,'0','1')
----导入到 tbl_group_data 集团工单数据表
insert into TEST02(GROUP_CODE,GROUP_Name,SERVICE_USER,CREATE_DATE,BELONG_REGION,BELONG_AREA)
values(@GROUP_CODE,@GROUP_Name,@SERVICE_USER,@CREATE_DATE,@BELONG_REGION,@BELONG_AREA)
--给游标赋值
fetch next From cr_cursor into @GROUP_CODE,@GROUP_Name,@BUISNESS_TYPE_NAME,@SERVICE_USER,@CREATE_DATE,@BELONG_REGION,@BELONG_AREA,@ACCOUNT_MANAGER,@BUISNESS_TYPE_ID,@BRANCH_ID
end;
close cr_cursor --4.关闭游标
deallocate cr_cursor --5.释放游标
--删除临时表
delete TBL_TEMP_JT;
delete TBL_TEMP_JTCP;
----------------------------------------------------------------------
-----导入集团产品工单数据,亦然,由于不清楚字段,所以没有写出来
-----导入集团产品工单数据是将TBL_TEMP_JTCP表中的数据查询出来,导入
-----到集团产品相关表中;
-----此外,需要注意的是:数据中有些操作类型或业务类型在数据库表中是不
-----存在,需要先将不操作类型或业务类型手动添加到类型表,再做导入操作
-----------------------------------------------------------------------
 
 ---备份本地文件夹到远程计算机
CREATE PROC bakup_Folder_Pro
    -- 备份本地文件夹到远程计算机
    -- 包括备份数据库
AS
    DECLARE    @dbName            VARCHAR(50)        --    需备份的数据名称
    DECLARE    @fileTitle        VARCHAR(200)        --    文件标题
    DECLARE    @folder            VARCHAR(200)        --    文件夹名称
    DECLARE @fileName         VARCHAR(200)        --    备份文件名
    DECLARE    @localFolderPath    VARCHAR(200)        --    本地文件夹路径
    DECLARE    @localBckPath        VARCHAR(200)        --    本地备份文件夹路径
    DECLARE    @netPath        VARCHAR(200)        --    远程文件夹路径
    DECLARE    @netFolderPath        VARCHAR(200)        --    新建的远程文件夹路径
    DECLARE    @netUserName        VARCHAR(200)        --    远程计算机用户名
    DECLARE    @netUserPwd        VARCHAR(200)        --    远程计算机密码
    DECLARE    @netSqlStr        VARCHAR(500)        --    映射字符串
    DECLARE    @copySqlStr        VARCHAR(500)        --    copy到远程计算机字符串
    DECLARE    @delSqlStr        VARCHAR(500)        --    del本地备份文件字符串
    DECLARE    @flag            VARCHAR(50)        --    标记,是否删除本机文件
 
    SET    @dbName            =    'DB_ESPC'
    SET    @fileTitle        =    REPLACE(REPLACE(REPLACE(CONVERT(CHAR(20),GETDATE(),120),':',''),' ',''),'-','')
    SET    @folder            =    @fileTitle    --    文件夹自动生成
    SET    @fileName        =    @fileTitle    +    '.bak'
    SET    @localFolderPath    =    'E:\copyFtp2'
    SET    @localBckPath        =    @localFolderPath+'\bck\'+@fileName
 SET    @netPath        =    '\\192.168.0.42\11daoru'
    SET    @netFolderPath        =    @netPath +'\'+@fileTitle
    SET    @netUserName        =    '192.168.0.42\ftp2'
    SET    @netUserPwd        =    '1qaz432!'
    SET    @netSqlStr        =    'net use ' +     @netPath + ' "' + @netUserPwd + '" /user:' + @netUserName
    SET    @copySqlStr        =    'XCOPY    '  +     @localFolderPath + '    /i/e    ' + @netFolderPath
    SET    @delSqlStr        =    'DEL    '  +    @localBckPath
    SET    @flag            =    'True'
 
    -- 将数据库备份到本机目录下,WITH INIT 表示覆盖相同文件
    BACKUP    DATABASE    @dbName    TO    DISK=@localBckPath    WITH    INIT    
 
    -- 映射
    EXEC    czyd..xp_cmdshell    @copySqlStr
 
    -- 将本机文件夹copy到远程计算机
    EXEC    czyd..xp_cmdshell     @netSqlStr
 
    -- 删除映射
    EXEC czyd..xp_cmdshell 'net use * /del /y'
 
    -- 选择是否删除本机文件
    IF(@flag = 'True')
    EXEC    czud..xp_cmdshell    @delSqlStr 
 
GO

转载于:https://my.oschina.net/TanShengHua/blog/188028

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值