在SSIS 2008中使用联接执行参数化删除的语法是什么?

时间:2011-04-26 09:11:59

标签: tsql ssis sql-delete

我正在尝试使用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无法绑定”)。硬编码值代替'?'停止显示此错误。

看起来这是正确的语法,上面有什么问题吗?

4 个答案:

答案 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