我正试图删除(和更新,但如果我可以删除比我可以更新)产品数据从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上执行操作的资料。
暂无答案!
目前还没有任何答案,快来回答吧!