我在SSIS中有以下任务:
在Check Stock任务中,我执行一个返回0或1的存储过程:
CREATE PROCEDURE [dbo].[SP_CheckStockAvailability]
AS
BEGIN
DECLARE @ItemGID nvarchar(250)=(SELECT TOP (1) ItemGID FROM XMLOrderlines WHERE Comparison='0')
SELECT CASE
WHEN @ItemGID IS NOT NULL
THEN CAST (0 AS bit)
ELSE CAST (1 AS bit)
END AS Comparison
FROM XMLOrderlines
END
GO
如果结果为1,我想执行Reject Order(右侧)任务,如果不是,则执行左侧的拒绝顺序。我设置为在变量Boolean
数据类型中导出过程的结果,默认值为“False”。
如果我编辑优先约束并将Expression
设置为评估操作,然后从上一个任务中选择变量,无论哪种方式都不会转到应该执行的下一个任务。我错过了什么?我尝试了我在网上找到的东西,但没有任何帮助我。谢谢!
答案 0 :(得分:2)
尝试选择评估操作到表达式和约束,表达式必须像@[User::Result] = 1
一样。表达式必须返回True
或False
。
有关更多信息,请点击以下链接:
答案 1 :(得分:2)
您必须设置以下值:
拒绝订单
Evaluation operation: Expression and Constraint
Value: Success
Expression: @[User::Result] = 1
OR
@[User::Result]
接受订单
Evaluation operation: Expression and Constraint
Value: Success
Expression: @[User::Result] = 0
OR
!@[User::Result]
截图
我认为最好在您的过程中添加TRY...CATCH
块,因此如果遇到错误,结果将为1
,订单将被拒绝:
CREATE PROCEDURE [dbo].[SP_CheckStockAvailability]
AS
BEGIN
BEGIN TRY
DECLARE @ItemGID nvarchar(250)=(SELECT TOP (1) ItemGID FROM XMLOrderlines WHERE Comparison='0')
SELECT CASE
WHEN @ItemGID IS NOT NULL
THEN CAST (0 AS bit)
ELSE CAST (1 AS bit)
END AS Comparison
FROM XMLOrderlines
END TRY
BEGIN CATCH
SELECT 1 AS Comparison
END CATCH
END
GO
答案 2 :(得分:1)
1
/ True
的表达式应为@[User::Result]
,而0
/ False
的表达式应为!@[User::Result]
}(注意感叹号)。
您可能还希望将“表达式和约束”用作“评估操作”,因为没有它,无论“检查库存”是成功还是失败,流程都将继续(除非这是所需的行为)。 “约束”部分是“值”字段所代表的 - 在您的图像中它被设置为Failure
,但是显示为灰色(由于仅选择了“表达式”)因此无效。