如何在SSIS中定义MySQL变量

时间:2013-01-17 15:48:54

标签: mysql ssis

我正在从MySQL数据表加载数据。该表有一个大的文本列,当记录数超过15,000时,SSIS连接超时。所以我想我会尝试将数据放在块中。我创建了一个查询来获取源表中的记录数,并创建一个包含起始和结束记录号的对象,直到考虑到所有记录。然后我设置For-Each控件来读取数据。我使用表达式来定义查询,它创建一个包含我需要的起始和结束记录号的查询。我可以评估表达式并将其粘贴到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]  + ";"

表达式创建的查询(确实在MySQL中提取了3,999条记录)是:

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;

1 个答案:

答案 0 :(得分:1)

This SO post建议添加

;Allow User Variables=True

连接字符串。

(另请查看MySQL's documentation on .Net connection strings了解所有可能的属性。)

另一个建议是使用脚本组件源来使用纯.NET,并避免使用MySQL变量的任何阻碍。