如何将多行查询结果存储在SSIS中的变量中

how to store multi row query result in a variable in SSIS

我的查询:

SELECT CONCAT('E.',+COLUMN_NAME +'='+'SE.'+COLUMN_NAME,',')
FROM Company2.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'employee'

查询结果:

E.Id=SE.Id,
E.Name=SE.Name,
E.Salary=SE.Salary,

我想将查询结果存储在

这样的变量中
 @variable=E.Id=SE.Id,E.Name=SE.Name,E.Salary=SE.Salary,

这样我就可以像这样在更新语句中使用:

Update E 
set @variable
from Employee as E
join Staging_Employee as SE
on E.Id = SE.Id

知道如何实现吗?

补充信息: 基本上我试图在 database.And 中从 Staging_Employee table 更新 Employee table 试图将列存储在变量中,以便我可以在 SSIS 中使用我的更新语句(执行 sql 任务)和员工 table 有 30 多列。

提前致谢

编辑-1:

对于插入: (1) oldedb 源 > (2) 查找任务(引用 table 在数据库中为空员工 table)> (3) 将行插入到 Oledb 目标。

更新: 从 (2) 查找匹配输出 > 查找任务(参考 table 是员工 table 在数据库中检查所有记录 id=id) > 暂存 table > 执行 sql 任务(!! 这里我想使用更新语句将记录从暂存 table 更新为数据库中的实际 table 我基本上是在尝试使用变量在更新语句中将字段 = 值(查询结果)保存在变量中,以便当 table 模式更改时字段=值自动更新****!!

编辑-2:

我使用了 John 的解决方案,只要 table 的 PK 被命名为 ID,它就可以工作,例如我修改了 John 的代码以用于 all tables 例如@table=anytable 和@stage_Table=staging_anytable:

例如尝试使用代码进行销售 table:

Declare @Table varchar(100)
Declare @stage_Table varchar(100)
Set @Table = 'Sales'
Set @stage_Table ='Stage_Sales'



    Declare @SQL varchar(max) ='
    Merge  '+@Table+'
    Using '+@stage_Table+' B on A.ID = B.ID
    When  Matched Then
    Update SET '+Stuff((Select ',A.'+quotename(Column_Name)+'=B.'+quotename(Column_Name) 

                    From INFORMATION_SCHEMA.COLUMNS

                    Where Table_Name= 'sales' and Column_Name<>'ID'

                    For XML Path ('')),1,1,'')  +'

    ;

    '
    --Print @SQL
    Exec(@SQL)

但是我收到这个错误,因为 ID 是 SalesID: 消息 4104,级别 16,状态 1,第 3 行 无法绑定多部分标识符 "A.ID"。 消息 207,级别 16,状态 1,第 3 行 列名称无效 'ID'。

知道@John 在这种情况下我该如何修改您的代码吗?

你考虑过MERGE

EDIT - Dynamic

Declare @SQL varchar(max) ='
Merge  Employee A
 Using Staging_Employee B on A.ID = B.ID
 When  Matched Then
  Update SET '+Stuff((Select ',A.'+quotename(Column_Name)+'=B.'+quotename(Column_Name) 
                From INFORMATION_SCHEMA.COLUMNS
                Where Table_Name= 'employee' and Column_Name<>'ID'
                For XML Path ('')),1,1,'')  +'
;
'
Print @SQL
--Exec(@SQL)

生成的SQL是

Merge  Employee A
 Using Staging_Employee B on A.ID = B.ID
 When  Matched Then
  Update SET A.[Name]=B.[Name],A.[Salary]=B.[Salary]
;