ssis 到别的表查找临时变量值

本文探讨了在SQL Server Integration Services (SSIS)过程中如何通过优化SQL查询来解决数据集成时遇到的问题,特别是在从一个数据库读取数据并插入到另一个数据库时的挑战。重点介绍了在查询参数设置、数据类型选择以及错误处理等方面的关键步骤,以确保数据一致性与流程稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文: ssis 到别的表查找临时变量值

etl过程过,往一个数据库表插入数据,插入的值往往需要到另外一个数据库读取。例如下面的客户跟踪,需要一个“项目ID”,这个ID需要到另一个数据库的一张表查找,找到后返回给“客户跟踪”任务流。

image

执行SQL任务“原项目ID”的配置如下图:
image 
image  

sql语句是:

if exists(SELECT * FROM dbo.TB_BBProject WHERE (PJ_Name = @PJ_Name))
     SELECT top 1 PJ_ID FROM dbo.TB_BBProject WHERE (PJ_Name = @PJ_Name);
else
     select –1
如果直接写:SELECT top 1 PJ_ID FROM dbo.TB_BBProject WHERE (PJ_Name = @PJ_Name),当这个查询没有数据返回的时候,ssis就会报道如下错误:
            无法为单行结果类型填充结果列。查询返回了一个空的结果集

这是因为“结果集”设置成单行,ssis就要求必须返回一行,不允许空行。
保存结果的变量“原项目ID”的数据类型需要设置成“Object”,在其他地方使用的时候,ssis会自动转成int类型,见下图:
在“OLE DB 源数据源”中使用“原项目ID”
image
“OLE DB 源”需要的查询参数需要使用“select * from tableName where fieldName=?”,只有ADO NET源才可以使用@参数名但是感到奇怪的是“ADO NET 源”(如下图)查询居然不可以设置查询参数:

image

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值