我正在尝试使用OLE DB命令使用输入文件的每一行中的数据执行删除。在sql server中手动运行时,实际查询工作正常(给定tableB.otherID与int进行比较),但是我在设置参数时遇到了问题。
delete tableA from tableA
where tableA.ID = ?
上面的查询运行,并允许我将一个输入列分配给tableA.ID。这就是我所期望的。
尝试
delete tableA from tableA
INNER JOIN tableB ON tableB.ID = tableA.ID
where tableB.OtherID = ?
然后引发错误(“多部分标识符tableB.OtherID无法绑定”)。硬编码值代替'?'停止显示此错误。
看起来这是正确的语法,上面有什么问题吗?
答案 0 :(得分:1)
这似乎是SSIS的一个错误/限制,我发现自己无法使用连接执行类似的参数化更新语句。
我最终使用的解决方法是使用我想要的delete语句创建一个临时存储过程,并直接将参数传递给它。
答案 1 :(得分:0)
我认为你想要的TSQL语法是:
DELETE FROM tableA
FROM tableA INNER JOIN tableB ON tableB.ID = tableA.ID
WHERE tableB.OtherID = ?
答案 2 :(得分:0)
DELETE FROM tableA
FROM tableA INNER JOIN tableB ON tableB.ID = tableA.ID
WHERE tableB.OtherID = @OrderId
@OrderID应该是SSIS中的变量。
答案 3 :(得分:0)
根据使用Execute Sql任务需要删除的行数变得非常快。
如果发生这种情况,那么对我有用的解决方案是将需要删除的行的键放入临时表中,然后当它们全部在那里时发出一个语句,删除单个语句中的所有这些行,清除临时表。比这更快,增加的好处是,你不必使用古怪的?句法。我从来不喜欢这样,当sql变得有点复杂时,很容易混合起来。
关心Gert-Jan