Пакет служб SSIS, запущенный через агент SQL Server, не может изменять переменные - PullRequest
0 голосов
/ 11 июня 2018

Сначала основы: я использую VS2015 SSDT для создания пакета SSIS, чтобы получить два файла на общем ресурсе DFSR (Windows 2012 R2), которые затем импортируются в базу данных SQL Server 2016.Пакет запускается через агент SQL Server.Агент SQL Server работает под учетной записью домена, у которой есть разрешения на доступ к папке DFSR и последующим файлам.

Проблема: У меня возникает странная проблема, которая, кажется, уменьшилась из-за того, что задачи сценариев SSIS былиневозможно изменить значение переменных SSIS.

У меня есть сценарий, который использует VB2015 для проверки существования двух файлов.В путях к файлам используются переменные для построения полного пути, а затем проверяется наличие обоих.Если они оба присутствуют, он устанавливает переменную в «True» и затем существует.Это прекрасно работает в VS2015 SSDT при тестировании функциональности, но эта переменная не изменяется при работе в агенте SQL Server.

Вот код:

Public Sub Main()
    Dim filepath As String = CStr(Dts.Variables("User::varFileDirectory").Value)
    Dim emplfile As String = filepath + CStr(Dts.Variables("User::varEmployeeCSVFile").Value)
    Dim histfile As String = filepath + CStr(Dts.Variables("User::varHistoryCSVFile").Value)
    If (File.Exists(emplfile) AndAlso File.Exists(histfile)) Then
        Dts.Variables("User::varFilesExist").Value = True
    Else
        Dts.Variables("User::varFilesExist").Value = False
    End If
    Dts.TaskResult = ScriptResults.Success
End Sub

enter image description here

Если файлы найдены в папке, то для User :: FilesExist устанавливается значение «True», а затем используется в последующем ограничении в качестве выражения:

enter image description here

Я пропускаю это ограничение во время тестирования из SSDT 2015, но после его развертывания в хранилище SSIS на SQL Server 2016 оно больше не проходит через это ограничение при наличии файлов.

Я подтвердил, что мой пакет запускается, просто установив значение по умолчанию «User :: varFilesExist» в «True».Пакет безупречно запускается из агента SQL Server, когда это будет сделано.При первом запуске он удаляет загруженные файлы, поэтому при запуске во второй раз происходит сбой, поскольку эти файлы отсутствуют.

Мне кажется, что я упускаю что-то простое, но кажется,что скрипт не меняет / не обновляет значение «User :: FilesExist» внутри скрипта.Я считаю, что мой код VB2015 правильный, потому что он отлично тестируется при запуске в VS2015 SSDT

1 Ответ

0 голосов
/ 14 июня 2018

Сегодня я установил SSDT 2017 и принес свои пакеты.Протестировано, а затем развернуто и все работает как положено.Не уверен, что происходит.

...