利用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