如何在Integration Services中手动使程序包失败?

时间:2009-01-12 14:55:06

标签: ssis

我在SSIS包中运行了一个Execute SQL Task语句。执行SQL任务正在运行sql并检查表是否有超过1000行。如果它们的行数少于1000行,我想让包失败。

如何在SQL语句中强制失败?

5 个答案:

答案 0 :(得分:19)

AFAIK,SSIS中的任务因错误而失败。因此,如果您的执行SQL任务中有一个类似的语句:

declare @count int
select @count = select count(*) from my_table
if @count < 1000
begin
    raiserror('Too few rows in my_table',16,1)
end
else
begin
    -- Process your table here
end

你应该得到你想要的结果。

答案 1 :(得分:11)

我喜欢使用脚本任务强制失败。这真的很容易。

1)添加脚本任务

2)更改自动生成代码的行:

Dts.TaskResult = (int)ScriptResults.Success; 

Dts.TaskResult = (int)ScriptResults.Failure;

然后你去!

答案 2 :(得分:3)

您可以像这样创建自定义错误消息

EXEC sp_ADDMESSAGE 
        @msgnum=55555,
        @severity=1,
        @msgtext='Threshold condition failed. The package execution has been terminated.'

然后,您可以使用Raiserror()

调用此错误
Raiserror (55555,20,-1) WITH LOG

您需要为严重性(此处为20)输入大于18的数字。您需要拥有此管理员权限。并且不要忘记 WITH LOG

答案 3 :(得分:2)

您需要使属性FailPackageOnFailure true..try检索特定任务的属性FailPackageOnFailure并将值赋值为true。所以包裹将失败。

答案 4 :(得分:0)

  1. 创建用户变量。将记录计数存储在该变量(User :: Rcnt)
  2. 只需使用发送邮件任务并定义工作流程。
  3. 在先例约束中(User :: Rcnt&lt; 20)