SSIS脚本任务不在SQL作业sstep中执行

时间:2016-12-12 20:30:35

标签: ssis permissions script-task

我一直在努力解决这个问题。我已经阅读了很多关于这个主题的类似问题,但我是新手,我正在阅读#34;希腊语给我"。也许有人会愿意在这个阶段帮助我。我创建了一个包含几个步骤的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文件的第一步是运行,但不会提取任何数据。 Job Activity Monitor表示它很成功。

我不知道下一步该做什么。对我来说很容易。我是新人。

1 个答案:

答案 0 :(得分:0)

虽然如果你没有收到错误肯定会有权限问题,但是它会表明代码没有执行。查看您在代码中放置代码的位置我认为您完全没有在SUB中调用Main () 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代理的权限和/或服务帐户。