mysql - 如何在 SSIS 中定义 MySQL 变量

标签 mysql ssis

我正在从 MySQL 数据表加载数据。该表有一个大文本列,当记录数超过 15,000 时,SSIS 连接超时。所以我想我会尝试以 block 的形式传输数据。我创建了一个查询以从源表中获取记录数,并创建了一个包含开始和结束记录号的对象,直到所有记录都被计算在内。然后我设置了一个 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;

最佳答案

This SO post建议添加

;Allow User Variables=True

到连接字符串。

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

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

关于mysql - 如何在 SSIS 中定义 MySQL 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14382829/

相关文章:

mysql - Perl 6 DBIish 坏了

c# - 在 SSIS 脚本任务静态构造函数中访问可配置值

mysql - 从 MS SQL 导入 MYSQL 时 SSIS 包出错

ssis - 将 csv 文件写入 Azure Blob 存储时,是否可以将 SSIS 配置为将 NULL 表示为 BLANK 而不是\N?

php - MySQL Select 与动态 where 子句不同

mysql - IN 可以用在 sql ON 子句上

php - MySQL 通过匹配它们的 id 来组合两个表字段

mysql - javascript mysql 客户端

ssis - 使用SSIS包导入大型数据集时,如何执行查找?

sql - SSIS 派生列 nvarchar 到 bit