【问题标题】:How do you define a MySQL variable in SSIS如何在 SSIS 中定义 MySQL 变量
【发布时间】:2013-01-01 05:07:16
【问题描述】:

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

【问题讨论】:

  • 我试过了,但是没用。反斜杠不会通过评估,正斜杠会但不会执行并将反斜杠直接放入源 SQL 命令文本编辑器并尝试预览数据会出错。
  • 感谢您的帮助,不走运。我试过 \\@curRow 和 \@\curRow, @curRow 以及使用正斜杠。似乎他们会提供一种传递不需要验证的字符串的方法。我也在抓稻草。
  • 我尝试过使用连接设置,大多数更改后都不会保存。没有任何效果,我想我将不得不放弃这种尝试。我会看看硬件专家是否可以延长超时期限(更改连接设置不保存)。我们正在从使用 GUID 列作为主键的第 3 方提取数据。他们不会创建我可以使用的视图,也不会添加一个整数列,我可以用它来查询块中的数据。而且他们倾向于批量处理记录,因此使用日期作为标准是行不通的,因为他们可能一次创建 30,000 条记录。

标签: mysql ssis


【解决方案1】:

This SO post 建议添加

;Allow User Variables=True

到连接字符串。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 2011-07-28
    • 2015-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    相关资源
    最近更新 更多