Ssis 插入一行并返回其主键
在SSIS中,如何使用execute SQL任务插入不带参数的单行,并取回主键,以便将其设置为用户变量?我的insert查询很简单:Ssis 插入一行并返回其主键,ssis,Ssis,在SSIS中,如何使用execute SQL任务插入不带参数的单行,并取回主键,以便将其设置为用户变量?我的insert查询很简单: INSERT INTO [AdWords.ImportData] (EndDate) VALUES (null) 问得好,我试了几次才弄明白。声明类型为Int32的SSIS变量(除非需要调整bigint或数字的大小)。我选择了tablePk作为我的 选择1 执行SQL任务 常规选项卡 结果集:无 SQL 参数映射选项卡 变量名称:User::tableP
INSERT INTO [AdWords.ImportData] (EndDate) VALUES (null)
问得好,我试了几次才弄明白。声明类型为Int32的SSIS变量(除非需要调整bigint或数字的大小)。我选择了tablePk作为我的 选择1 执行SQL任务
- 常规选项卡
- 参数映射选项卡
?
。它不能像我上面所说的那样简单,除非它是
唯一的区别是所使用的查询
SQL
选择3
如果您使用的是数据流,我将概述一种方法,简而言之,您需要在OLEDB命令之前向数据流中添加一列。在OLE DB命令中,您将该空列映射到存储过程中的
输出
参数中,然后当存储过程启动时,它将用该过程中的值替换该列。也可以使用bilinkc的版本,不带参数:
执行SQL任务
常规选项卡
结果集:单行
SQL
在单行结果集的映射中,在结果名称框中输入LastId,然后映射到变量
使用单个输出参数(bilinkc的版本)可能会稍微快一些,这取决于SSIS是如何“隐藏”的,以及它是否创建了完整的数据读取器,而不是使用输出参数的单个sp_ExecuteSQL调用。我认为另一种选择非常干净。 它使用和结果集而不是参数映射,这需要更少的配置
insert dbo.ImportData (EndDate)
output inserted.Id
values (NULL);
- 将此语句中的
替换为您的标识列的名称Id
- 使用“单行”作为结果集类型
- 无参数映射
- 将其添加到结果集中
选项卡:结果名称:
(表示第一列)并选择变量名称,例如。0
(变量类型:Int32)User::tablePk
DECLARE @sql nvarchar(500)
, @paramDef nvarchar(500)
SELECT
@sql = N'INSERT INTO dbo.ImportData (EndDate) VALUES (NULL);
SELECT @ident = SCOPE_IDENTITY();'
, @paramDef = N'@ident int OUTPUT'
EXECUTE sp_executesql @sql, @paramDef, @ident = ? OUTPUT
INSERT INTO dbo.ImportData (EndDate) VALUES (NULL);
SELECT SCOPE_IDENTITY() AS LastId
insert dbo.ImportData (EndDate)
output inserted.Id
values (NULL);