2017-02-06 33 views
0

我正在導入幾個商店的銷售和購買成本,其中每個商店都有自己的包裝(以利用平行度)。因爲我必須進入每個商店OLE DB Source並調整FROM子句以捕獲商店具有單獨的數據庫(商店編號爲9999的數據庫爲[database].[dbo].[sales9999]),所以設置此過程可能相當耗時。在SSIS Select和From子句中使用變量

我還想在每個商店的Select子句中使用商店編號。例如,對於客戶9999,我需要將Select 9999 AS StoreKey作爲列。

因此,我想有這樣的:

SELECT ? as StoreKey, a.saleprice, b.purchasecost 
FROM ? AS a JOIN ? AS b ON a.ID = b.ID 

在我的OLE DB源,並與相應的參數匹配?的。但是,當我試圖實現這一點時,我收到了錯誤,參數只能在Where子句中使用,我不需要這些。

任何人有任何想法?

Regards,

+0

您的表格設計很糟糕,您不能使用列或表名稱的參數 - 僅適用於值。你能改變你的設計嗎? –

+0

你想要做什麼?爲什麼你認爲聲明中的「變量」是答案?如果不知道必須使用的元數據 - 列,名稱,大小,血統等,SSIS就無法工作。每個流程都是不同的,每個表格都是不同的。 –

+1

*如果您希望使用相同的流程和*相同的*元數據來加載多個表格中的數據,則可以使用變量來計算整個表達式。 –

回答

1

您當然可以在變量被評估爲表達式的幫助下做到這一點。例如,你的SELECT語句可以寫爲可變下面的表達式:

"SELECT N'"[email protected][User::strStoreKey]+"' as StoreKey, a.saleprice, b.purchasecost 
    FROM "[email protected][User::strTableName]+" AS a JOIN "[email protected][User::strAnotherTable]+" 
    AS b ON a.ID = b.ID" 

這裏的變量必須與表達鑄造String數據類型或類型來定義。
想到幾個重要的點,使用這種方法時:

  1. 結果集所有Select查詢必須是相同的,在列,其名稱和數據類型的條款。
  2. 您必須提供默認值來查詢建築物變量,即strStoreKey,strTableNamestrAnotherTable這會導致有效的查詢。否則你的包在保存時將無法通過驗證。
  3. 您的數據流應具有以下屬性設置:DelayValidation=True。這會在執行前驗證數據源或目標,而不是在包加載時。

將目標表名稱設置爲變量時,也可以將此方法用於可變目標:相同的限制適用。

+0

感謝您的回覆!認爲它應該是可能的。那N是什麼意思?從谷歌搜索「選擇N ..」它似乎返回N行,或者是否意味着其他我沒有找到? – Cenderze

+0

@Cenderze,'N'...「'表示引號內的字符串是Unicode。我更喜歡在整個SSIS包中使用Unicode,以避免隱式轉換爲默認的代碼頁問題。 – Ferdipux

相關問題