@dvlpr 是正确的,您的问题是当执行 SQL 任务 1 需要单个结果时,您没有得到任何结果。
您粘贴的代码有点不清楚哪个代码在哪里,但我假设第一部分是您在 SSIS 执行任务中使用的代码,后者是 SSMS 中的示例。如果是这种情况,问题是您在脚本本身中为变量分配了值 0,我假设没有 PONUMBER 为 0:
Declare @POID as Varchar(50)
Set @POID = 0
WHERE (BizTalk_POA_HEADER.PONUMBER = @POID)
如果您想从您的第一个数据流任务中传递 PONUMBER,您需要将其加载到一个变量中,然后在您的执行 SQL 任务中使用该变量,并确保在执行此操作时正确设置参数映射。这是一个关于参数的 SO 问题,这将有助于 How to pass variable as a parameter in Execute SQL Task SSIS? 这里是在数据流任务中使用表达式任务来设置变量值 SSIS set result set from data flow to variable (注意使用后来添加的不接受的答案,用于2012 年以上,而原版是 2008 年)
接下来,除非您保证只有 1 个结果,否则您还需要将 TOP 1 添加到您的 select 语句中,因为如果您获得超过 1 个结果,您将再次收到不同的错误。
按所有 cmets 编辑:
所以配置看起来像您正在使用允许您使用命名参数的 ADO.NET 连接。如果您不使用它(https://msdn.microsoft.com/en-us/library/cc280502.aspx),则会受到限制。参数映射看起来正确,结果集应该没问题。至于您的错误,我不知道,因为您没有发布确切的错误,所以我不知道问题出在哪里。如果您在图像中将 ADO.Net 与当前的执行 SQL 任务配置一起使用,您确实会遇到一些问题。 1 您试图声明要作为无效参数传递的变量,您需要删除该 DECLARE 语句。我怀疑您真正需要做的就是将您的 SQL 输入修改为:
SELECT DISTINCT BizTalk_POA_HEADER.PONUMBER, FAN_Suppliers.SupplierName,
FAN_Company_Details.CompanyName, FAN_Company_Details.[PrimaryEmail],
BizTalk_POA_HEADER.[DeliveryDate]
FROM BizTalk_POA_HEADER INNER JOIN
FAN_PO_Details ON BizTalk_POA_HEADER.PONUMBER =
CONCAT('PO',FAN_PO_Details.PoNumber) INNER JOIN
FAN_PO ON FAN_PO_Details.PurchaseOrderID = FAN_PO.PurchaseOrderID
INNER JOIN FAN_SupplierDetails ON FAN_PO.SupplierDetailsID =
FAN_SupplierDetails.SuppliersDetailsID INNER JOIN
FAN_Suppliers ON FAN_SupplierDetails.SupplierID = FAN_Suppliers.SupplierID
INNER JOIN FAN_Company_Details ON FAN_PO.CompanyID =
FAN_Company_Details.CompanyDetailsID
WHERE (BizTalk_POA_HEADER.PONUMBER = @POID)
只需去掉声明 @POID 和 SET = 0 有几个原因 1 因为在设置参数映射时它是多余的,2 SSIS 不喜欢它并且会抛出错误,3 因为你正在设置它的值为 0,这意味着它将始终为 0.....