2012-10-22 26 views
2

雖然這看起來像是一個基本問題,但我一直在爲了獲得高效的解決方案而努力。SSIS ADO.net源代碼的可變SQL命令

我有一個服務器上的值的查找表,我讀取並使用C#腳本任務組裝成字符串。我將此字符串寫入一個變量,該變量作爲我的數據流中ADO.NET數據源(來自不同服務器,我只能讀取該數據源)上的大型SQL查詢中的WHERE參數傳入。例如,這個字符串就像

('Frank', 'John', 'Markus', 'Tom') 

我想把它作爲我的WHERE子句追加。 我無法直接從ADO.NET數據源讀取變量,也無法使用'Expression'屬性來設置我的SQL,因爲我的SQL查詢超過4000個字符。我可以使用執行SQL任務來運行我的查詢,將結果加載到一個記錄集中,然後我假設,然後遍歷記錄集,但這是非常低效的。

這樣做的最好方法是什麼?我的最終目標是將這些結果放在第一臺服務器的表格中。

+0

將參數值插入表中,然後編寫查詢以從該表中提取參數值。 – RBarryYoung

+0

我從我有管理員訪問的服務器上的表中組裝我的參數。問題是我需要使用這些參數在另一臺服務器上執行查詢(我只能讀取)。還是你建議我在數據流中編寫腳本任務? – user1384831

+0

不,你以爲是我的意思。 – RBarryYoung

回答

2

您可以嘗試將腳本組件設置爲源代碼 - 腳本中的變量和字符串可能長於4000個字符,因此您可以在其中查詢。

設置你的組件類似這樣的文章:http://beyondrelational.com/modules/2/blogs/106/posts/11119/script-componentsource-part1.aspx 在這其中,你有例子,如何獲取使用ExecuteReader數據,並把它的腳本組件的輸出:http://beyondrelational.com/modules/2/blogs/106/posts/11124/ssis-script-component-as-source-adonet.aspx在這其中你必須說明如何正確AQUIRE連接:http://www.toadworld.com/platforms/sql-server/b/weblog/archive/2011/05/30/use-connections-properly-in-an-ssis-script-task

通過加入這些信息,您應該能夠編寫您的源腳本組件,它可以使用任何長度的動態構建的查詢來獲取數據。

祝你好運:)

+0

謝謝!我從來沒有想過使用腳本組件作爲源代碼,現在我終於有了一種編程方式來編寫我的SSIS查詢的方法:D – user1384831

0

你可以做一個簡單的select語句返回值將包括('Frank', 'John', 'Markus', 'Tom')的列表。所以,你的select將返回:

Name 
---------- 
Frank 
John 
Markus 
Tom 

然後,在SSIS中,使用Merge Join Component(將充當INNER JOIN),而不是你的主要查詢的WHERE子句。

這是實現你想要的最乾淨的方式。