在SSIS中,如何使用执行SQL任务插入没有参数的单行并获取主键,以便将其设置为用户变量?我的插入查询很简单:
INSERT INTO [AdWords.ImportData] (EndDate) VALUES (null)
Run Code Online (Sandbox Code Playgroud)
bil*_*nkc 19
好问题,带我试了几下.声明一个Int32类型的SSIS变量(除非您需要为bigint或数字调整大小).我选择tablePk作为我的.
执行SQL任务
ResultSet:无
SQL
INSERT INTO dbo.ImportData (EndDate) VALUES (NULL);
SELECT ? = SCOPE_IDENTITY()
Run Code Online (Sandbox Code Playgroud)
变量名称:User :: tablePk
方向:输出
数据类型:长
参数名称:0
参数大小:-1
这是原始解决方案,因为我无法理解如何?在常规查询中获取占位符.它不能像我上面那样简单,除非是.
唯一的区别是使用的查询
SQL
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
Run Code Online (Sandbox Code Playgroud)
如果您正在使用数据流,我概述了如何将结果集从T-SQL语句添加到数据流的方法?简而言之,您需要在OLE DB命令之前向数据流中添加一列.在OLE DB命令中,您将该空列映射到OUTPUT存储过程中的参数,然后在存储过程触发时,它将使用过程中的值替换该列.
或者bilinkc的版本,没有参数:
执行SQL任务
常规选项卡ResultSet:单行
SQL
INSERT INTO dbo.ImportData (EndDate) VALUES (NULL);
SELECT SCOPE_IDENTITY() AS LastId
Run Code Online (Sandbox Code Playgroud)
在单行结果集的映射中,在结果名称框中输入LastId,并映射到您的变量.
使用单个输出参数(bilinkc的版本)可能稍微快一点,取决于SSIS如何"覆盖"它以及它是否创建一个完整的datareader而不是一个带有输出参数的sp_ExecuteSQL调用.
| 归档时间: |
|
| 查看次数: |
20992 次 |
| 最近记录: |