2009-01-12 17 views
11

我正在我的SSIS包中运行一个执行SQL任务语句。执行SQL任务正在运行sql并检查这些表是否有超过1000行。如果他们的行少于1000行,我想让包失败。如何在集成服务中手动失败包?

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

回答

14

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 

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

+0

您还必须正确设置包的属性,并可能设置 'failparentonerror' – ConcernedOfTunbridgeWells 2009-01-12 15:27:50

2

您需要使属性FailPackageOnFailure true..try检索特定任务的属性FailPackageOnFailure并将值赋给true。这样包就会失败。

2

您可以创建这样

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

自定义错误信息,那么您可以调用使用RAISERROR()

Raiserror (55555,20,-1) WITH LOG 

您需要输入大于18的数为严重性此错误(这里是20)。您需要具有管理员权限。并且不要忘记使用日志

8

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

1)脚本任务

2)改变自动生成的代码行添加:

Dts.TaskResult = (int)ScriptResults.Success; 

Dts.TaskResult = (int)ScriptResults.Failure; 

和你去那里!

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