我正在从 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;