【问题标题】:Passing SQL Server Name of SSIS Job to package variable将 SSIS 作业的 SQL Server 名称传递给包变量
【发布时间】:2015-09-03 17:26:59
【问题描述】:

我正在尝试找出一种方法,可以将运行 SSIS 作业的 SQL 服务器名称传递给包中​​的变量。

基本上,该作业在哪个服务器上运行,将被传递到包中 Ole DB 连接中的 ServerName 属性,以便将数据加载到该服务器中。

我一直在查看有关包配置的文档,我觉得它应该在环境变量部分。但是,我认为列出的任何“环境变量”都不是服务器名称。我用谷歌搜索了这个问题,并在 StackOverflow 上搜索了问题,但我似乎找不到这个问题。

【问题讨论】:

  • 您是否尝试在不重新配置连接管理器的情况下跨服务器重用包?如果是这样,这个问题之前已经在这里问过:stackoverflow.com/questions/2111587/…
  • @rwking 据我所知,这不是我所问问题的解决方案。我不仅需要动态设置连接字符串。我特别需要当前作业正在运行的服务器名称。我可以从一个硬编码的不同 ole db 源传递一个 sql 表中的服务器名。但这不是我要找的。谢谢。
  • 所以你想将服务器名设置为包变量?
  • 这可能是解决方案,我需要创建包含服务器名称的系统环境变量,但没有真正解释如何执行此操作
  • 您能否详细说明您最终要完成的工作?

标签: sql-server configuration ssis package


【解决方案1】:

可能有几种不同的方法,但我认为您可以通过一个简单的执行 SQL 任务来完成此操作。

  1. 创建一个新的执行 SQL 任务

  2. 在 General -> SQL Statement 下,在“SQLStatement”字段中输入您的查询 Select @@SERVERNAME as ServerName

  3. 在常规 -> 结果集下,选择“单行”

  4. 在参数映射下,输入您的变量(如果没有,则创建一个)变量名称中的 User::ServerName,“输入”作为方向,0 作为参数名称,-1 作为参数大小

  5. 在结果集下,为您的结果名称输入“ServerName”并在变量名称中键入变量

  6. 点击确定

试一试,看看它是否能达到你想要的效果。

【讨论】:

  • 这无法完成我想要的,因为执行 SQL 任务需要 Ole DB 连接字符串来执行查询。即使它只是查询系统表。
  • Dts.Variables["User::ServerName"].Value = System.Net.Dns.GetHostName();这个 C# 函数给了我主机名称,通常是服务器名称(尽管我认为数据库引擎实例可能不同)
【解决方案2】:

我能够通过使用脚本任务和 C# 代码来获取机器名称或运行它的机器的 IP 地址来完成此操作。

Dts.Variables["User::ServerName"].Value = System.Net.Dns.GetHostName();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    相关资源
    最近更新 更多