我的查询:如何多行查询结果的变量存储在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
任何想法,我如何能够实现这一目标?
的额外信息: 基本上我想从Staging_Employee表更新Employee表中database.And试图存储在变量列,这样我可以在SSIS使用我的更新statment(EXCUTE SQL任务)和员工表格有30多列。
预先感谢
编辑-1:
对于插入: (1)oldedb源>(2)查找任务(参考表是在DB空Employee表)>( 3)将行插入Oledb目的地。
更新: 由式(2)查找匹配的输出>查找任务(参考表是数据库EMPLOYEE表检查所有记录ID = ID)>的临时表>执行SQL任务(!这里我想要使用更新统计更新登记表中的记录到DB中的实际表,我基本上试图在更新统计中使用变量来将field = value(Query Result)保存在变量中,以便当表架构更改fields = value时自动获取更新**** !!
编辑2:
我用约翰的解决方案,只要表的PK被命名为实例ID我修改了约翰的代码,用来例如@表中的所有表它的工作原理= anytable和@ stage_Table = staging_anytable:
对于例如尝试使用代码表销售:
Declare @Table varchar(100)
Declare @stage_Table varchar(100)
Set @Table = 'Sales'
Set @stage_Table ='Stage_Sales'
Declare @SQL varchar(max) ='
Merge '[email protected]+'
Using '[email protected]_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如何在这种情况下修改你的代码?
IT方面eems就像你知道列名已经。为什么你需要SSIS而不仅仅是一个存储过程?我还建议只处理更改。另外,你是否缺少插入? – KeithL
顺便说一句,回答你的问题。将结果集存储到一个ADO对象中并循环到foreach中,然后将这些项添加到一个变量中,然后将该变量插入到sql语句中(确保删除最后一个逗号),然后在执行SQL中运行SQL变量。 – KeithL
请检查我的编辑。 – shaadi