在SSIS中,如何使用播放按钮或右键单击并选择执行任务来检查BIDS或任务是否在BIDS中运行?

时间:2016-07-12 17:48:02

标签: ssis bids

这与调试模式不同。如果开发人员实际上在BIDS中,我想显示警告,如果正在从预定作业运行包,则不显示警告。

4 个答案:

答案 0 :(得分:0)

我担心你想要实现的目标是不可能的。 BIDS使用与SSIS代理相同的运行时。

但是,您可以在程序包中设置环境变量,并在部署期间将其删除。所有这些都是hacky,但却失败了。

在本地运行包而不是部署时,确实应该没有自定义逻辑(除了可能影响执行图的配置之外)。

如果您尝试阻止用户错误,最好教育您的同行和/或限制访问。

答案 1 :(得分:0)

您可以使用打开MsgBox的脚本任务。只有当我没有弄错时,MsgBox才会在任务在BIDS中运行时打开。

答案 2 :(得分:0)

我已经找到但没有检查是否存在可以用于此目的的系统变量“ System :: InteractiveMode”。需要检查的东西。

答案 3 :(得分:0)

根据Microsoft在System Variables上的文档,InteractiveMode变量应该能够满足您确定软件包是从BIDS还是从SQL Job运行的需求。

InteractiveMode(布尔值)
指示软件包是否在其中运行 互动模式。如果软件包在SSIS Designer中运行,则此 属性设置为 True 。如果软件包正在使用DTExec 运行 命令提示符实用程序,该属性设置为 False

我在Flow的开头(在控制流选项卡中)创建了一个Script任务,该任务具有对以下任务的优先约束。我在ReadOnlyVariables字段中定义了System :: InteractiveMode,并使用下面的代码显示问题并处理答案。

public void Main()
        {
            if ((bool)Dts.Variables["InteractiveMode"].Value)
            {
                DialogResult button = MessageBox.Show("Are you sure you want to run the package?", "Validate", MessageBoxButtons.YesNo);

                if (button == DialogResult.No)
                {
                    Dts.TaskResult = (int)ScriptResults.Failure;
                    return;
                }
            }
            Dts.TaskResult = (int)ScriptResults.Success;
        }

它不会像BIDS中的“停止”按钮那样停止执行,但是会阻止其余程序包的执行。我尝试使用RunningPackage.Stop()方法,但是为了获取RunningPackages列表,它需要从SQL Server Integration Service运行。

我从BIDS和SQL Server集成服务对其进行了测试,并且按预期方式工作。