2015-03-26 4 views
0

Я удалил и переписал этот вопрос, поскольку я не думаю, что я был чист, и это вызвало некоторое разочарование.Сценарий скрипта SSIS Не работает при запуске из агента SQL

У меня есть пакет SSIS, который создает и заполняет лист Excel, пакет отлично работает и создает файлы по своему желанию и может выполняться по расписанию от агента SQL Server без каких-либо проблем.

Проблема возникает, когда я пытаюсь выполнить задачу сценария, которая выполняет некоторый скрипт VB для удаления определенной строки в файле excel.

Public Sub Main() 
    ' 


    Dim xlApp As Excel.Application 
    Dim xlSheet As Excel.Worksheet 

    xlApp = New Excel.Application 
    xlApp.Workbooks.Open(Dts.Variables("NewFileName").Value.ToString) 
    xlSheet = xlApp.Workbooks(1).ActiveSheet 


    xlSheet.Rows(4).Delete() 

    xlApp.Workbooks(1).Save() 
    xlApp.Workbooks(1).Close() 
    xlSheet = Nothing 

    ' 
    Dts.TaskResult = ScriptResults.Success 
End Sub 

Теперь это прекрасно работает внутри среды BIDS и делает именно то, что мне нужно. Однако после того, как пакет будет развернут задание не дает ошибку

Источник: Удалить заголовок строки Описание: System.Reflection.TargetInvocationException: Исключение было брошено на цели вызова. ---> System.Runtime.InteropServices.COMException (0x800A03EC): Microsoft Excel не может получить доступ к файлу 'G: \ Folder \ Folder1 \ Status Файл \ Status26032015.xls'. Существует несколько возможных причин:? Имя или путь к файлу не существует. ? Файл используется другой программой . ? Книга, которую вы пытаетесь сохранить, имеет то же имя, что и текущая открытая книга .

Пакет выполнен в виде ServerName \ Administrator, у которого есть доступ к G: (поскольку он не сработает, когда он создаст файл, так как это делается с той же переменной). Все статьи, которые я проверил, указывают на разрешения агента SQL Server, однако, поскольку выполняется 90% работы, что включает в себя создание файла на диске G, безусловно, он должен иметь доступ.

+0

Попробуйте сделать более тщательной очистке памяти. После запуска кода несколько раз, на вашем компьютере может быть несколько экземпляров Excel.exe. Например, посмотрите на область очистки этого решения: http://sqlage.blogspot.com/2013/12/ssis-how-to-get-most-recent-file-from.html –

+1

Поскольку вы создаете excel в этом пакете SSIS, возможно ли, что соединение не было уничтожено, когда вы переходите к следующему шагу и пытаетесь удалить строку? то есть задача, которая создает файл excel и заполняет его, по-прежнему сохраняет соединение к моменту запуска второй задачи и пытается подключиться к новому файлу excel. Можете ли вы разбить процесс на два разных пакета, чтобы очистка соединений происходила до того, как установлено соединение с пересылкой строк? –

+1

@ william-salzman Попробовав разделить задачу сценария в отдельный пакет, даже создал пакетный скрипт, который убил любое преимущество.exe, который может работать, но все равно получить ошибку – GPH

ответ

2

Попробуйте добавить эту папку на сервер, на котором выполняется SQL Agent Job; C: \ Windows \ SysWOW64 \ config \ systemprofile \ Рабочий стол

Он решил проблему, с которой я столкнулся.

Больше информации здесь: https://social.msdn.microsoft.com/forums/sqlserver/en-US/34e5596a-4d02-4499-8a4e-8dad9fa27528/ssis-2008-r2-script-task-fails-when-run-as-job

+0

Большое вам спасибо за это. Абсолютно сумасшедший, что такая ошибка существует! Спасибо!!! – GPH

-1

Процесс агента SQL Server не сможет переводить любые подключенные диски, например. G:\.

Я считаю, что это связано с тем, что он не запускает полный сеанс Windows и не загружает профиль пользователя.

Я бы преобразовал ссылки на букву диска в формат URI, например. \\myserver\fileshare

+0

Привет, Майк, его не подключенный диск, это тот диск, который находится на сервере, что пакет SSIS продолжается. Пакет отлично работает с компонентом задачи сценария, который включает в себя создание нового файла в G: – GPH

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