我有一个 SSIS 包,它从 SQL Server 包配置表中设置一些变量数据。(选择“直接指定配置设置”选项)
当我使用开发包时指定的数据库连接时,这很有效。但是,当我在测试环境中的服务器(64 位)上运行它(作为代理作业或直接运行包)并在连接管理器中指定新的连接字符串时,包仍然从数据库服务器读取设置我在开发中指定的。
所有其他连接都占用了正确的连接字符串,它似乎只是从错误位置读取的包配置。
有什么想法还是我做错了什么?
我有一个 SSIS 包,它从 SQL Server 包配置表中设置一些变量数据。(选择“直接指定配置设置”选项)
当我使用开发包时指定的数据库连接时,这很有效。但是,当我在测试环境中的服务器(64 位)上运行它(作为代理作业或直接运行包)并在连接管理器中指定新的连接字符串时,包仍然从数据库服务器读取设置我在开发中指定的。
所有其他连接都占用了正确的连接字符串,它似乎只是从错误位置读取的包配置。
有什么想法还是我做错了什么?
我能够做到这一点的唯一方法是使用 Windows 环境变量。您可以在环境变量中指定连接字符串和用户首选项等内容,然后从您的 SSIS 任务中获取这些环境变量。
我更喜欢在 SQL 客户端配置中使用服务器别名。这样,当您决定将包指向另一个 SQL Server 时,就像编辑别名以指向新服务器一样简单,无需在 SSIS 包中进行编辑。将包移动到实时服务器时,您需要添加别名,并且它可以工作。
当您对服务器有真正痛苦的命名约定时,这也很有帮助,别名可以是比实际机器名称更具描述性的名称。
我实际上并没有完全理解你的问题,但我将我的连接设置存储在一个配置文件中,通常每个环境都有一个,比如开发、生产等。这些包在运行时从配置文件中读取连接设置。
当您创建调用 SSIS 包的作业并设置步骤时,会出现一个选项卡式区域。默认选项卡是您设置包名称的位置,下一个选项卡是您可以设置配置文件的位置。每个包都有一个配置文件,并为服务器(开发、测试、产品)进行更改。配置文件可以直接放在 dev、test 和 prod 服务器上,然后在设置该作业时指向它们。
如果您使用 SQL Server 包配置,那么包的所有属性都将来自 SQL Server 表 - 请检查
我们希望将包配置保存在数据库表中,我们知道它会与我们的其他数据一起备份,并且我们知道在哪里可以找到它。只是一种偏好。
我发现要让它工作,我可以使用环境变量配置来设置我正在从中读取包配置的连接管理器的连接字符串。(虽然我必须重新启动 SQL Server 代理才能找到新的环境变量。当我将它部署到生产环境时并不理想)
看起来当您将 SSIS 包作为计划任务中的一个步骤运行时,它按以下顺序工作:
我本来希望前 2 个是相反的,这样我就可以从计划的作业中为我的包配置设置数据源。这就是我希望其他人在维护包时寻找它的地方。
SSIS 的安全性是很糟糕的。当我不在办公室时,没有人能够支持任何事情。这项工作从不从配置文件中读取......我放弃了。它仅在我在“数据源”选项卡中编辑字符串时才有效。但是,如果您碰巧第二次进入该工作,密码就会丢失。糟糕的设计,绝对可怕。您可能会认为,当您在作业步骤中指定 xml 文件时,它会从那里读取已定义的连接字符串,但事实并非如此。这真的对其他人有用吗?
转到包属性并将部署设置为 True。这应该适用于您所做的事情。
我有同样的问题,得到了相同的答案,即您不能编辑用于 SQL Server 中托管的包配置的连接字符串,除非您指定 SQL Server 连接字符串应位于环境变量中。
不幸的是,这在我的开发设置中不起作用,其中两个环境托管在同一台机器上。我最终遵循了 Scott Coleman 的方法,详细介绍了SQL Server Central [免费注册和一个好的站点]。诀窍是您创建一个视图以将您的配置设置存储在一个中央服务器上,然后使用连接到它的机器来确定哪个环境处于活动状态。
我使用了这种方法,但也使用了连接到环境的用户来做出决定,因为我的测试和开发设置在同一个 SSIS 实例上运行,但使用不同的用户名。Scott 在评论中建议应设置应用程序名称,但这不能在包执行作业步骤中更改,因此不是一个选项。
我发现的另一个警告是,我必须在视图中添加“Instead of”触发器来执行配置变量的插入、更新和删除。