sqlserver 导出数据为excel,并拷贝到ftp。

利用bcp方式导出数据,然后上传到ftp服务器,这个估计很多人都做过。

如果所有的一切工作让数据库都自动执行的话就需要动点脑子了,呵呵,把下面的做个job就好了!

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO

--exec MASTER..XP_CMDSHELL 'BCP DC_system.dbo.LOG_CN OUT D:/EI/kk.txt -w -S172.20.1.10 -Usa -PSLSchina-1'
-- ALTER  proc ftpput
-- as
DECLARE @RESULT   INT
DECLARE @AppMsg  VARCHAR(200)
DECLARE @SQL   VARCHAR(2000)

DECLARE @FileName  VARCHAR(200)
DECLARE @TodayFileName VARCHAR(200)
DECLARE @OldFile  VARCHAR(200)
DECLARE @LogName  VARCHAR(200)
DECLARE @LogText  VARCHAR(200)
DECLARE @cmd  VARCHAR(1000)

DECLARE @FTPServerIP  VARCHAR(30)
DECLARE @FTPUser   VARCHAR(30)
DECLARE @FTPPwd   VARCHAR(30)
DECLARE @FTP_Path   VARCHAR(200)
DECLARE @LocalDrive  VARCHAR(4)
DECLARE @LocalFolder  VARCHAR(200)
DECLARE @LocalPath  VARCHAR(200)
DECLARE @DBServerIP  VARCHAR(20)
DECLARE @DBDataBase  VARCHAR(50)
DECLARE @DBUser   VARCHAR(50)
DECLARE @DBPwd   VARCHAR(50)

DECLARE @Today  VARCHAR(30)
DECLARE @Day3Ago  VARCHAR(30)

SET @Today  =CONVERT(VARCHAR(10),GETDATE(),112)
SET @Day3Ago =CONVERT(VARCHAR(10),DATEADD(D,-3,GETDATE()),112)

SET @LogName  = 'AppMsg_CN.txt'    --'DC_Log_'   +  @Today + '.txt'
SET @FileName  = 'TrnShippinginst_'   +  @Today + '.csv'
SET @OldFile  = 'TrnShippinginst_'   +  @Day3Ago + '.csv'
SET @TodayFileName = 'ShipData_'   + @Today  + '.cab'

SET @FTPServerIP = '172.20.2.44'
SET @FTPUser  = 'ftpmanage'
SET @FTPPwd  = 'qingdaoftp'
SET @FTP_Path = 'sfa'

SET @DBServerIP = '172.20.1.10'
SET @DBDataBase = 'DC_system'   -- これは修正需要です。'DC_System'
SET @DBUser  = 'sa'
SET @DBPwd  = 'SLSchina-1'

SET @LocalDrive  = 'D:'
SET @LocalFolder  = 'ftptest'
SET @LocalPath  = @LocalDrive + '/' + @LocalFolder + '/'
IF @LocalFolder = ''  SET @LocalPath = @LocalDrive + '/'

-- データを導出
Print 'データを導出:'+convert(varchar(20),getdate(),120)
SET  @cmd = 'BCP '+@DBDataBase+'.dbo.TrnShippingHD_Temp_CN OUT ' + @LocalPath + @FileName + ' -w -S' + @DBServerIP + ' -U' + @DBUser + ' -P' + @DBPwd

--INSERT INTO LOG_CN EXEC MASTER..XP_CMDSHELL @cmd

-- IF NOT EXISTS(SELECT 1 FROM LOG_CN WHERE OUTPUT LIKE '%行コピーされました%')
--  BEGIN
--    SET @AppMsg = 'ChinaERROR:CSVファイルを作成時、エラーが起こる'
--    GOTO  Error_Handle
--  END


--SET  @cmd = 'BCP '+@DBDataBase+'.dbo.LOG_CN OUT ' + @LocalPath + @LogName + ' -w -S' + @DBServerIP + ' -U' + @DBUser + ' -P' + @DBPwd

EXEC  @RESULT =  MASTER..XP_CMDSHELL @cmd ,NO_OUTPUT

IF @RESULT <> 0 
 BEGIN
   SET @AppMsg = 'ChinaERROR:LOGを作成時:、エラーが起こる'
   GOTO  Error_Handle
 END
-- FTPの登録をコントロール
Print 'FTPの登録をコントロール:'+convert(varchar(20),getdate(),120)
SET @cmd = '@echo open ' + @FTPServerIP + '>' + @LocalPath + 'ftpcmd'
EXEC  MASTER..XP_CMDSHELL @cmd ,NO_OUTPUT

SET @cmd = '@echo USER ' + @FTPUser + ' ' + @FTPPwd + '>>' + @LocalPath + 'ftpcmd'
EXEC  MASTER..XP_CMDSHELL @cmd ,NO_OUTPUT

SET @cmd ='@echo cd ..>>' + @LocalPath + 'ftpcmd'
EXEC  MASTER..XP_CMDSHELL @cmd ,NO_OUTPUT

SET @cmd ='@echo cd ' + @FTP_Path + '>>' + @LocalPath + 'ftpcmd'EXEC  MASTER..XP_CMDSHELL @cmd ,NO_OUTPUT

SET @cmd ='@echo lcd ' + substring(@LocalPath, 1, len(@LocalPath) - 1) + '>>' + @LocalPath + 'ftpcmd'
EXEC  MASTER..XP_CMDSHELL @cmd ,NO_OUTPUT

SET @cmd ='@echo put ' + @TodayFileName +'>>' + @LocalPath + 'ftpcmd'
EXEC  MASTER..XP_CMDSHELL @cmd ,NO_OUTPUT

SET @cmd ='@echo put ' + @LogName + '>>' + @LocalPath + 'ftpcmd'
EXEC  MASTER..XP_CMDSHELL @cmd ,NO_OUTPUT

SET @cmd ='@echo bye>>' + @LocalPath + 'ftpcmd'
EXEC  MASTER..XP_CMDSHELL @cmd ,NO_OUTPUT

-- ファイル圧縮、転送、削除のコントロール
Print 'ファイル圧縮、転送、削除のコントロール:'+convert(varchar(20),getdate(),120)
SET @cmd ='@echo ' + @LocalDrive + '>' + @LocalPath + 'cmd.bat'
EXEC  MASTER..XP_CMDSHELL @cmd ,NO_OUTPUT

SET @cmd ='@echo CD ' + @LocalFolder + '>>' + @LocalPath + 'cmd.bat'
EXEC  MASTER..XP_CMDSHELL @cmd ,NO_OUTPUT

SET @cmd = '@echo MAKECAB ' + @FileName + '  ' + @TodayFileName +'>>' + @LocalPath + 'cmd.bat'  -- ' ShipData_' + @Today + '.cab
EXEC  MASTER..XP_CMDSHELL @cmd ,NO_OUTPUT

SET @cmd = '@echo ftp -n -v -s:ftpcmd>>'+ @LocalPath + 'cmd.bat'
EXEC  MASTER..XP_CMDSHELL @cmd ,NO_OUTPUT

SET @cmd = '@echo exit>>' + @LocalPath + 'cmd.bat'
EXEC  MASTER..XP_CMDSHELL @cmd ,NO_OUTPUT


-- 圧縮/FTP伝送
Print '圧縮/FTP伝送:'+convert(varchar(20),getdate(),120)
SET @cmd = @LocalPath + 'cmd.bat'
EXEC  @RESULT =  MASTER..XP_CMDSHELL @cmd   ,NO_OUTPUT

IF @RESULT <> 0 
BEGIN
  SET @AppMsg = 'ChinaERROR:圧縮/FTP伝送時、エラーが起こる'
  GOTO  Error_Handle
END
 -- ファイルの削除
 Print 'ファイルの削除:'+convert(varchar(20),getdate(),120)
 SET @cmd = 'del ' +  @LocalPath + 'cmd.bat'
 EXEC  MASTER..XP_CMDSHELL @cmd ,NO_OUTPUT
 
 SET @cmd ='del ' +  @LocalPath + 'ftpcmd'
 EXEC  MASTER..XP_CMDSHELL @cmd ,NO_OUTPUT
 
 SET @cmd = 'del ' + @LocalPath + @OldFile
 EXEC  MASTER..XP_CMDSHELL @cmd ,NO_OUTPUT
 
 SET @cmd = 'del ' + @LocalPath + @LogName
 EXEC  MASTER..XP_CMDSHELL @cmd ,NO_OUTPUT
 
 SET @cmd = 'del ' + @LocalPath + @TodayFileName
 EXEC  MASTER..XP_CMDSHELL @cmd ,NO_OUTPUT


Error_Handle:
 print 'eend'

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值