2013-01-17 61 views
1

我正在從MySQL數據表中加載數據。該表有一個大的文本列,並且當記錄數超過15,000時,SSIS連接超時。所以我想我會嘗試將數據分塊。我創建了一個查詢來獲取源表中的記錄數,並創建一個包含開始和結束記錄編號的對象,直到記錄所有記錄爲止。然後,我設置了For-Each控件來讀取數據。我使用表達式來定義查詢,並創建一個包含我需要的開始和結束記錄編號的查詢。我可以評估表達式並將其粘貼到MySQL中,並且它可以按照預期工作。如何在SSIS中定義MySQL變量

除了我必須在查詢中使用MySQL變量這一事實之外,一切都會很棒。即使變量名在引號之間,但當SSIS實際嘗試執行查詢時,它告訴我必須定義參數@curRow,但該變量用於MySQL。任何人有任何想法如何解決這個問題?我首先想到的是要建立在一個名爲curRow

我使用的表達包一個字符串變量爲:

"SELECT id, 
     report_html, 
     CASE 
      WHEN `TimeStamp` < '1900-01-01 00:00:00' 
      OR `TimeStamp` IS NULL THEN 
       CAST('1900-01-01' AS DATETIME) 
      ELSE `TimeStamp` 
     END AS `TIMESTAMP`, 
     @curRow := @curRow + 1 AS row_number 
FROM corp_inv, (SELECT @curRow := 0) AS r 
HAVING row_number BETWEEN " + (DT_STR, 6, 1252) @[User::LoVal] + " 
         AND " + (DT_STR, 6, 1252) @[User::HiVal] + ";" 

而且由表達式(它拉上了3999條記錄中的MySQL)創建查詢是:

SELECT id, 
     report_html, 
     CASE 
     WHEN `TimeStamp` < '1900-01-01 00:00:00' 
      OR `TimeStamp` IS NULL THEN 
       CAST('1900-01-01' AS DATETIME) 
     ELSE `TimeStamp` 
     END AS `TIMESTAMP`, 
     @curRow := @curRow + 1 AS row_number 
FROM corp_inv, (SELECT @curRow := 0) AS r 
HAVING row_number BETWEEN 1 
         AND 3999; 
+0

我試過了,但不起作用。反斜槓不會通過評估,正斜槓會但不會執行,並將反斜槓直接放入源SQL命令文本編輯器中,並嘗試預覽數據會產生錯誤。 – Jim

+0

感謝您的幫助,沒有運氣。我試過\\ @ curRow和\ @ \ curRow,'@ curRow'以及使用正斜槓。看起來他們會提供一種傳遞不需要驗證的字符串的方法。我也在抓秸稈。 – Jim

+0

我嘗試使用連接設置進行播放,大多數更改時不保存。沒有什麼可行的,我想我必須放棄這種嘗試。我會看看硬件大師是否可以延長超時時間(更改連接設置不保存)。我們正在從使用GUID coloumns作爲主鍵的第三方提取數據。他們不會創建我可以使用的視圖,也不會添加可用於查詢塊中數據的整數列。而且他們傾向於批量處理記錄,所以使用標準日期不起作用,因爲他們可能一次創建30,000條記錄。 – Jim

回答