我的查詢:如何多行查詢結果的變量存儲在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