0

我一直在努力解决这个问题。我已经阅读了许多关于这个主题的类似问题,但我对此很陌生,我正在阅读“希腊语对我”。也许有人会愿意在这方面帮助我。我创建了一个包含几个步骤的 SSIS 包。第一步是一个脚本任务,它使用 VB8 脚本从 SFTP 服务器拉取数据。脚本如下所示:

Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Runtime

<System.AddIn.AddIn("ScriptMain", Version:="1.0", Publisher:="", Description:="")> _
<System.CLSCompliantAttribute(False)> _
Partial Public Class ScriptMain
    Inherits Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase

    Enum ScriptResults
        Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success
        Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
    End Enum

    Public Sub HealthSmart()

        Dim Path As String, Path2 As String ', fileName As String, fo As Object, x As Object, y As Object, z As Object, rs As Object

        Path = "\\RENYSQL1\share\Health_Smart\Received_Files\Test"
        Path2 = "\\RENYMstr1\shared\CLIENT FOLDERS\HEALTHSMART\Original_PDF_Files\Test"

        Shell("""C:\Program Files (x86)\Ipswitch\WS_FTP 12\wsftppro.exe"" -s ""Health_Smart:/Test/AMC_Test/*.pdf"" -d ""local:" & Path & "\"" -quiet", vbMaximizedFocus)
        Shell("""C:\Program Files (x86)\Ipswitch\WS_FTP 12\wsftppro.exe"" -s ""Health_Smart:/Test/AMC_Test/*.pdf"" -d ""local:" & Path2 & "\"" -quiet", vbMaximizedFocus)

        Dts.TaskResult = ScriptResults.Success
    End Sub

End Class

在 SSIS 包中执行该步骤时,它运行得非常好。当我将 SSIS 包导入 MSDB 并选择运行包时,它也可以正常运行。但是当我将它作为工作中的一个步骤安排时,它就好像它运行得很完美。但第一步拉的不是数据。

我尝试将 SSIS 包的权限设置为对所有内容具有完全权限的用户。我还尝试在没有密码的情况下将包保护级别设置为 DontSaveSensitive。

在 SQL 作业方面,我尝试在作业中使用 Windows 身份验证以及我之前提到的登录来运行包。都没有奏效。此外,我将其更改为在 32 位上运行 - 但无济于事。

我了解 SQL 作业由 SQL 代理运行。代理是否有特定的登录名?我部门的人说不。

奇怪的是,当我安排作业运行时,它运行并说它是成功的。但是使用上述脚本获取 SFTP 文件的第一步会运行,但不会拉取任何数据。作业活动监视器说它是成功的。

我不知道下一步该做什么。对我轻松点。我是新来的。

4

1 回答 1

0

虽然如果您没有收到错误信息,您当然可能会遇到权限问题,但这表明代码没有执行。查看您在脚本中放置代码的位置,我认为您完全有可能没有SUBMain () Sub. 创建新脚本时,您应该看到如下内容:

Public Sub Main()
    '
    ' Add your code here
    '
    Dts.TaskResult = ScriptResults.Success
End Sub

基本上它说在这里添加你的代码是微软引导你添加脚本的地方。完全可以像你一样在自己的 sub 中执行它,但是如果你这样做,你需要在Main() SUB这样的内部调用你的 sub:

Public Sub Main()
    '
    ' Add your code here
    '
    HealthSmart()

    Dts.TaskResult = ScriptResults.Success
End Sub

如果您确实拥有Main SUB并调用您的代码。wsftppro.exe中可能存在错误。您是否在脚本之外运行代码?

如果权限导致 exe 中的问题而不是错误,您可以尝试以有权访问这些位置的用户身份通过​​您的开发环境运行,如果它为您成功,那么您可能需要 SQL 代理和/或服务帐户的权限。

于 2016-12-13T00:15:31.743 回答