您的位置:首页 > 数据库

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

2013-12-26 00:00 651 查看
摘要: 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐