2013-04-01 67 views
1
INSERT INTO [DEV_BI].dbo.[DimAktivitet]([Beskrivning],[företag],[Projektnummer],[Aktivitet], 
      loaddate) 
SELECT NULL, 
     a.DATAAREAID, 
     a.PROJID, 
     a.MID_ACTIVITYNUMBER, 
     GETDATE() 
FROM [?].dbo.[v_ProjCostTrans_ProjEmplTrans] a 
LEFT OUTER JOIN [DEV_BI] .dbo.[DimAktivitet] b ON a.MID_ACTIVITYNUMBER = b.Aktivitet 
AND a.DataAreaID = b.företag 
AND a.ProjID = b.Projektnummer 
WHERE b.Aktivitet_key IS NULL 

我有這樣的上述SQL代碼在執行SQL任務和在參數映射我已經映射了一個名爲用戶變量::與數據類型爲nvarchar,參數名稱= 0即時得到的ConnectionString這下面的錯誤。在SSIS執行SQL任務映射變量

[Execute SQL Task] Error: Executing the query "insert into [DEV_BI].dbo.[DimAktivitet]([Beskrivni..." failed with the following error: "Invalid object name '?.dbo.v_ProjCostTrans_ProjEmplTrans'.". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.

請有人幫我解決這個問題。

+0

當你映射在執行SQL任務的變量,這意味着要在SQL中使用實際變量太多,你不能用它來查詢數據庫,從這樣的一個變量發生變化。你應該改變連接字符串從「表達式」屬性 – Lamak

+0

你能否請詳細解釋我,所以我會盡力實現它。 – Rajkumar

回答

2

看來你正試圖改變基於變量的數據庫。執行SQL任務只能將參數用作WHERE子句中的過濾器。此行爲在this TechNet article中描述。舉例來說,你可以這樣做:

insert into [DEV_BI].dbo.[DimAktivitet]([Beskrivning],[företag],[Projektnummer],[Aktivitet],loaddate) 
select null,a.DATAAREAID,a.PROJID,a.MID_ACTIVITYNUMBER,GETDATE() from 
[DEV_BI].dbo.[v_ProjCostTrans_ProjEmplTrans] a 
left outer join 
[DEV_BI] .dbo.[DimAktivitet] b 
on a.MID_ACTIVITYNUMBER = b.Aktivitet AND a.DataAreaID = b.företag AND a.ProjID = b.Projektnummer 
where b.Aktivitet_key is null 
AND b.SomeFilterCriteria = ?; 

如果你真的想基於變量變化的數據庫,那麼你有三種選擇:

  1. 改變連接管理器的連接字符串到數據庫基於如in a blog post所述的表達式的連接。如果你只是改變數據庫而沒有其他的東西,這是最好的解決方案。

  2. 生成整個SQL代碼作爲變量並執行變量作爲SQL命令而不是將變量傳遞給執行SQL命令。在「從變量中傳入SQL語句」一節中對此進行了描述in this blog post

  3. 創建一個存儲過程,將該參數傳遞給存儲過程,並讓它生成所需的SQL。

+0

我會閱讀您的所有建議並嘗試在我的解決方案上實施它。感謝您的迴應 – Rajkumar