【问题标题】:Use SQL Server database table as to configure SSIS project parameters and variables使用 SQL Server 数据库表配置 SSIS 项目参数和变量
【发布时间】:2019-05-25 01:01:36
【问题描述】:

我们希望使用 SQL Server 表作为 SSIS 中所有连接管理器值的来源。我们更愿意在项目级别执行此操作,因为我们的许多连接已经在项目级别。我们希望能够在项目打开时根据输入值轻松切换我们正在查看的环境。我们需要这样做的原因是,在 dev 中创建项目时,我们使用的连接与将它们部署到 prod 时使用的连接不同,而且我们使用了数百个不同的连接。我们不想切换 SSIS 或 SQL Server 代理或 SSIS 目录中的任何内容。我们希望这些在 SQL Server 表中得到严格维护。

  1. 我们如何将这些值从 SQL Server 表馈送到提供值或参数的变量中?重申一下,最终产品将在 SQL Server 中有 1 个单表,其中包含所有列,如 [ConnectionString][InitialCatalog][UserName][UserName][Password][HeaderRowsToSkip] 等。我们将参数化所有连接管理器这将从该表中提供它们的值。我们需要指导如何做到这一点。

  2. 我希望能够将 PROD 和 DEV 包含在同一个表中,其中 [Environment] 列的值为“Dev”或“Prod”,如果可能的话,我们希望有一个当项目在 SSIS 中打开时提示打开,询问我们想要哪个 [Environment](可填写提示),然后根据我们输入的内容过滤 SQL 表中的结果以使用 Dev 或 Prod。

如果 2) 不可行,我们将只使用单独的表,这些表可以根据我们开发或部署的时间在连接管理器中手动切换。

【问题讨论】:

  • 但是 SSDT 中的环境支持使用不同的服务器/数据库来进行连接。当 Visual Studio 中已经存在功能来完全满足您的需求时,为什么要将这些值(不安全地)存储在 SQL Server(不是动态的?)中?
  • 另外,为什么您使用 SQL 身份验证而不是包的受信任连接?当您使用 SSDT 时,您显然是在 Windows 上,因此使用受信任的连接似乎是一个更好的主意。
  • 我暂时离开了,但我建议您学习并尝试环境的工作原理。我根本看不出滚动您自己的环境管理系统有什么好处
  • 你是什么意思避免从 Dev 到 prod 的工作量?在 Visual Studio 中配置好环境后,从工具栏的下拉菜单中选择 prod/dev 真的有那么难吗?如果是这样,那么没有任何东西可以帮助您。
  • @Larnu 这真的让我发笑。老实说,我不知道有“配置管理器”。在你和 Nick.McDermaid 建议环境之后,我开始研究它们。我刚刚找到了一篇文章,这正是我们正在寻找的。感谢你们的耐心和帮助!继续,将其放入答案中,我会将您标记为已回答。

标签: sql-server parameters ssis ssis-connection-manager


【解决方案1】:

听起来和“SSIS 目录中的环境变量”完全一样!

SSIS 目录中的“环境”类似于参数的配置文件,在您的情况下,您可以创建 Prod/Dev 环境,并将其中的变量映射到项目级参数,这些参数映射到项目级连接管理器.

参考: Setup Environment Variables in SQL Server Integration Services Creating a Robust SSIS Development Environment using the SSIS Catalog

【讨论】:

  • 这与我最初的问题中的 cmets 一起导致我使用 Configuration Manager 作为我的解决方案。
【解决方案2】:

除了关于安全程度的讨论(SQL Server 表中的密码,真的吗?),我已经使用 PowerShell 的特殊组合提出了这种请求,并且在某些情况下从 SQL 表中的服务器获取信息,为此,您可以使用 SQL 脚本任务编辑器:

SELECT instanceName,databaseName,DataSource
FROM meta.InfoSSIS
WHERE environmentName = ? --Input parameter corresponding to DEV, INT or PROD

这个查询的输出应该提供对象,例如,用户:数据库列表,它基本上是一个数据类型:对象,它存储了 SSIS 实例、数据库名称和数据源的信息。在内部,您可以拥有一个 ForEach 循环对象,该对象允许与 DatabaseList 对象进行交互并对其进行处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多