【问题标题】:SSIS String variable sizeSSIS字符串可变大小
【发布时间】:2018-10-23 14:43:04
【问题描述】:

我想知道 SSIS 字符串变量的大小限制是多少。我有一个 OLE DB 数据源,它查询一列(字母数字 10 位)值并将结果集提供给脚本任务,然后脚本任务创建一个基于集合的删除 sql 语句(即 DELETE FROM Table Where ID IN("所有 id 都在这里”)并将 sql 语句分配给一个字符串变量,第三个任务(执行 sql)然后从变量执行 sql。我想知道我是否在 IN 子句中获得 10,000 个值会导致任何问题字符串变量?请指教

【问题讨论】:

    标签: sql ssis


    【解决方案1】:

    字符串变量大小没有限制。SSIS 数据类型派生自 .net 子系统,因此如果您确实有一个非常大的字符串值,那么您可能会耗尽内存

    【讨论】:

    • 所以有一种伪限制,内存不足。在那张纸条上,我应该使用for循环容器并逐行运行每个痛苦的最后一个任务,至少我不会耗尽内存或者我猜因为我的记录不会超过10000条记录,字符串变量是很好。
    • 是的,我认为它们的限制大约是 2GB,如此处所述stackoverflow.com/questions/140468/…
    • 是的,您可以使用 for 循环(ADO 或项目枚举器)并且您可以限制值。基本上甚至不需要 for 循环,因为您可以将记录集变量中的列值存储到数据表中,并且然后在脚本任务循环中所有记录
    • 但是我仍然必须从我得到的记录中构造 sql 语句,以再次执行它。除非我为每个行值执行 DELETE sql 语句,否则我想通过 IN 子句一次性完成,而不是循环遍历并为 10,000 行中的每一行执行 DELETE 语句,我在正确的轨道上吗?
    • 你可以这样做。但是你需要将你的 sql 语句构造为“Delete FROM YourTable WHERE ID IN (" + @[User::StoreID] + ")”
    【解决方案2】:

    一种可能的解决方案是将 ID 放在目标数据库的临时表中,然后您可以执行 DELETE 语句,在临时表和要从中删除的表之间建立连接。

    或者,您可以重写您的语句:DELETE FROM Table WHERE ID IN (SELECT ID FROM TempTable)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-27
      • 1970-01-01
      相关资源
      最近更新 更多