У меня проблемы с созданным мной пакетом служб SSIS, который в конечном итоге проверит, существует ли файл Excel, если не отправит электронное письмо с сообщением об ошибке.Если он существует, данные загружаются в таблицу, а файл Excel удаляется.Это работает, когда я выполняю пакет в Visual Studio, но не когда я развертываю его на SQL Server.Проблема в том, что файл не определяется как существующий в последнем случае.Надеясь, что кто-то сможет помочь.Мой первый пост о переполнении стека, поэтому, пожалуйста, будьте осторожны:).
Существует переменная с именем FileExists типа Boolean, которая изначально имеет значение False.Задача сценария с приведенным ниже кодом является первым шагом в потоке управления, и это устанавливает для переменной значение True / False в зависимости от того, существует ли файл (для которого путь задан в другой переменной FilePath).
<Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute()> _
<System.CLSCompliantAttribute(False)> _
Partial Public Class ScriptMain
Inherits Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
Public Sub Main()
If (File.Exists(CStr(Dts.Variables("FilePath").Value))) Then
Dts.Variables("FileExists").Value = True
Else
Dts.Variables("FileExists").Value = False
End If
Dts.TaskResult = ScriptResults.Success
End Sub
#Region "ScriptResults declaration"
Enum ScriptResults
Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success
Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
End Enum
#End Region
End Class
Все работает нормально, когда я запускаю пакет в Visual Studio 2017. Обнаружен файл или нет.Переменная имеет значение true или false соответственно, и процесс служб SSIS следует по соответствующему маршруту.
При развертывании пакета на SQL Server 2016 (тип проекта VS установлен на 2016) и выполнении там переменная всегда возвращаеткак ложьПоскольку переменная первоначально объявлена как ложная, либо она не установлена в ложное значение, либо файл существует, возвращает ложное значение.Ошибки не отмечаются во время выполнения.
Это для запуска на SQL Server 2016. Пакет был создан в VS 2017 с проектом, для которого целевой сервер настроен как 2016 (и, следовательно, версия VB 2015).
Я был убежден, что это должны быть разрешения (для расположения файла или иным образом), но я добавил имя пользователя, выполняющего пакет, к электронным письмам, распространенным позже в потоке управления.Это были мои учетные данные при запуске с VS и с сервера.
Я также подумал, что он взломан, когда понял, что использую VB 2017 на SQL Server 2016, но преобразование проекта для использования SQL 2016 в качестве целевого сервера не решило проблему.