使用ssis从mysql中删除记录

j5fpnvbx  于 2021-06-21  发布在  Mysql
关注(0)|答案(0)|浏览(223)

我正试图删除(和更新,但如果我可以删除比我可以更新)产品数据从mysql网站数据库使用ssis,当这些产品已被标记在我们的erp(和sql server数据库用于报告)作为停产。我试过以下方法:
第一次尝试:将要删除的行保存到一个记录集中,并使用foreach循环和executesql任务来删除它们,如下所述。
结果:部分工作,但速度非常慢,每次删除约500次后失败。我想知道mysql数据库是否有某种黑客保护功能。
第二次尝试:使用forxmlpath:将要删除的所有行的主键转换为逗号分隔的字符串变量,如这里所述(或者,更确切地说,由于4000个字符的限制,将它们转换为一系列)。
sql选择代码(工作正常)

WITH CTE (Product_sku,rownumber) AS 
(
    SELECT product_sku 
    , row_number() over(order by product_sku) 
    FROM product_updates
    WHERE action = 'delete'
)

SELECT 
Delete1= cast(
    (SELECT TOP 1 
    STUFF(
        (SELECT ',''' + product_sku+'''' FROM CTE 
        WHERE cte.RowNumber BETWEEN 1 and 700 
        FOR XML PATH (''))
    , 1, 1, '') ) 
    AS varchar(8000))

... and nine more of these select statements into additional variables to allow for larger delete operations.

然后使用以下代码执行sql命令,使用此结果从mysql中删除记录:

DELETE FROM datarepo.product
WHERE product_sku in (?)

结果:包已执行,但未能删除任何内容。在查看mysql查询日志文件时,我看到了以下内容,它告诉我为什么它无法删除任何内容。

DELETE FROM datarepo.product 
WHERE product_sku in ('\'')

请注意,当使用硬编码值(如下所示)时,相同的ssis execute sql语句可以很好地删除。

DELETE FROM datarepo.product 
WHERE product_sku in ('1234','5678','abcd', etc...)

我在网上找不到其他东西。正如rezarad在第一篇链接文章中所说,很难找到关于使用ssis在mysql上执行操作的资料。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题