Я удалил и переписал этот вопрос, поскольку я не думаю, что я был чист, и это вызвало некоторое разочарование.Сценарий скрипта 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, безусловно, он должен иметь доступ.
Попробуйте сделать более тщательной очистке памяти. После запуска кода несколько раз, на вашем компьютере может быть несколько экземпляров Excel.exe. Например, посмотрите на область очистки этого решения: http://sqlage.blogspot.com/2013/12/ssis-how-to-get-most-recent-file-from.html –
Поскольку вы создаете excel в этом пакете SSIS, возможно ли, что соединение не было уничтожено, когда вы переходите к следующему шагу и пытаетесь удалить строку? то есть задача, которая создает файл excel и заполняет его, по-прежнему сохраняет соединение к моменту запуска второй задачи и пытается подключиться к новому файлу excel. Можете ли вы разбить процесс на два разных пакета, чтобы очистка соединений происходила до того, как установлено соединение с пересылкой строк? –
@ william-salzman Попробовав разделить задачу сценария в отдельный пакет, даже создал пакетный скрипт, который убил любое преимущество.exe, который может работать, но все равно получить ошибку – GPH