gpt4 book ai didi

sql-server - 为什么 SSIS vb 脚本在 VS 中执行时正确检测到文件存在,而不是从 SQL Server 中执行

转载 作者:行者123 更新时间:2023-12-02 04:24:02 26 4
gpt4 key购买 nike

我在使用我创建的 SSIS 包时遇到问题,该包最终将检查 excel 文件是否存在,如果不存在则发送电子邮件以指示失败。如果存在,则将数据加载到表中并删除 excel 文件。这在我在 Visual Studio 中执行包时有效,但在我将其部署到 SQL Server 时无效。问题是在后一种情况下未检测到文件存在。希望有人能提供帮助。我在 Stack Overflow 上发表的第一篇文章,请多关照 :)。

定义了一个名为 FileExists 的变量,其类型为 Boolean,最初设置为 False。具有以下代码的脚本任务是控制流中的第一步,它根据文件是否存在(其路径在另一个变量 FilePath 中设置)将变量设置为 True/False。

<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)上部署包并在那里执行时,变量始终返回 false。由于变量最初声明为 false,因此它未设置为 false 或文件存在返回 false。执行期间不会标记任何错误。

这将在 SQL Server 2016 上运行。该包是在 VS 2017 中创建的,项目设置为目标服务器为 2016(因此 VB 版本为 2015)。

我确信这一定是权限(对文件位置或其他),但我已将执行程序包的用户名附加到稍后在控制流中分发的电子邮件中。这些是我从 VS 和服务器执行时的凭据。

当我意识到我在 SQL Server 2016 上使用 VB 2017 但将项目转换为使用 SQL 2016 作为目标服务器并没有解决问题时,我还以为我破解了它。

最佳答案

您必须授予 SQL 数据库引擎服务帐户权限 NT SERVICE\MSSQL$<Instance Name> (其中 <Instance Name> 应替换为安装的实例名称):

关于sql-server - 为什么 SSIS vb 脚本在 VS 中执行时正确检测到文件存在,而不是从 SQL Server 中执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56562729/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com