2016-12-05 11 views
-1

Каждый день я получаю электронное письмо от стороннего стороннего пользователя, у которого есть данные, прикрепленные в формате CSV.Импорт CSV из zipped Email Attachment в SQL Server

Что я хочу сделать, это автоматизировать импорт этих данных в базу данных SQL-сервера. Электронная почта не является локальной для сервера, поэтому, по-видимому, мне нужно разархивировать и сохранить файл в папку, где сервер может ее увидеть, а затем просто вставить в нее вставку?

Возможно ли получить обменный сервер для автоматизации этого сохранения и распаковки, или мне нужно сделать это через другое приложение? У меня есть база данных доступа, работающая по ежедневному графику, которая, по-видимому, делает это. База данных доступа также может ссылаться на таблицы SQL и выполнять вставку, но я не знаю относительных достоинств и производительности для этого, а не для объемной вставки или SQL-альтернативы?

+0

Возможно, вам стоит взглянуть на SSIS, чтобы автоматизировать процесс распаковки, сохранения и импорта. –

ответ

2

Это очень зависит от вашей среды (какие права SQL у вас есть, какой у вас сервер электронной почты). Так что нелегко это ответить. Что мы делаем (через скрипт Powershell):

1.) Мы используем небольшое приложение с самокодировкой, которое загружает контент с почтового сервера. Как didn't указано сервер существуют различные решения возможно:

2.) Сохраненный файл SQL будут импортированы с использованием:

mysql -u username -p database_name < file.sql 

P.S. Убедитесь, что вы обрабатываете только приложение, в котором вы знаете имя, например. SQLdumpABC.zip и не каждый * .zip. Это необходимо для предотвращения того, чтобы вы обрабатывали каждую вредоносную программу в своем «решении» ;-)

0

У меня было время, чтобы поработать над этим, и хотя это не очень, у меня есть работа.

Во-первых я использую внешний вид VBA слепленный из фрагментов в Интернете и здесь, чтобы сохранить вложения в папку и распаковать их

Затем я использую следующий в SQL в цикле через ту же папку и импортировать CSV файлы.

CREATE TABLE #ALLFILENAMES(WHICHPATH VARCHAR(255),WHICHFILE varchar(255)) 

--some variables 
declare @filename varchar(255), 
     @path  varchar(255), 
     @sql  varchar(8000), 
     @cmd  varchar(1000) 


--get the list of files to process: 
SET @path = Full_UNC_Path 
SET @cmd = 'dir ' + @path + '*.csv /b' 
print @cmd 
INSERT INTO #ALLFILENAMES(WHICHFILE) 
EXEC Master..xp_cmdShell @cmd 
UPDATE #ALLFILENAMES SET WHICHPATH = @path where WHICHPATH is null 


--cursor loop 
declare c1 cursor for SELECT WHICHPATH,WHICHFILE FROM #ALLFILENAMES where WHICHFILE like '%.csv%' 
open c1 
fetch next from c1 into @path,@filename 
While @@fetch_status <> -1 
    begin 

    --bulk insert won't take a variable name, so make a sql and execute it instead: 
    set @sql = 'BULK INSERT tbl_MyInbound FROM ''' + @path + @filename + ''' ' 
     + '  WITH ( 
       FIELDTERMINATOR = '','', 
       ROWTERMINATOR = ''\n'', 
       FIRSTROW = 2 
      ) ' 
print @sql 
exec (@sql) 

    fetch next from c1 into @path,@filename 
    end 
close c1 
deallocate c1 


--Extras 

--delete from ALLFILENAMES where WHICHFILE is NULL 
--select * from #ALLFILENAMES 
drop table #ALLFILENAMES 

if (@prevXpCmdshell = 0) 
begin 
exec sp_configure 'xp_cmdshell', 0 
reconfigure 
end 

if (@prevAdvancedOptions = 0) 
begin 
exec sp_configure 'show advanced options', 0 
reconfigure 
end 

Однако, я хотел бы, чтобы удалить файл, а после его импорта, чтобы предотвратить реимпорта и т.д. Я попытался следующие, но это не сработало, выводя Access is denied

set @cmd = 'del ' + @path + @filename 
EXEC master..cp_cmdShell @cmd 

Если я может просто понять, почему я не могу удалить файл, тогда я был бы счастливым парнем. Есть идеи?

 Смежные вопросы

  • Нет связанных вопросов^_^