这与调试模式不同。如果开发人员实际上在BIDS中,我想显示警告,如果正在从预定作业运行包,则不显示警告。
答案 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集成服务对其进行了测试,并且按预期方式工作。