Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql 在SSIS 2008中使用联接执行参数化删除的语法是什么?_Tsql_Ssis_Sql Delete - Fatal编程技术网

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

Tsql 在SSIS 2008中使用联接执行参数化删除的语法是什么?,tsql,ssis,sql-delete,Tsql,Ssis,Sql Delete,我正在尝试使用OLEDB命令,使用输入文件中每一行的数据执行删除操作。当在sql server中手动运行时,实际查询工作正常(给定tableB.otherID与int进行比较),但是我在参数化它时遇到了问题 delete tableA from tableA where tableA.ID = ? 上面的查询将运行,并允许我将一个输入列分配给tableA.ID。这就是我所期望的 尝试 delete tableA from tableA INNER JOIN tableB ON tableB.

我正在尝试使用OLEDB命令,使用输入文件中每一行的数据执行删除操作。当在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”)。硬编码一个值来代替“?”将阻止出现此错误


这似乎是正确的语法,上面有什么问题吗?

我认为您需要的TSQL语法是:

DELETE FROM tableA 
FROM tableA INNER JOIN tableB ON tableB.ID = tableA.ID 
WHERE tableB.OtherID = ? 

其中@OrderID应该是SSIS中的变量。

根据需要使用执行Sql任务删除的行数,执行速度会很快变慢

如果出现这种情况,对我来说有效的解决方案是将需要删除的行的键放入临时表中,然后当它们都在其中时,发出一条语句,删除单个语句中的所有行,并清除临时表。这样做要快得多,好处是你不需要;你不必用诡异的语言吗?语法。我从来都不喜欢这样,当sql变得更复杂时,很容易混淆东西


关于Gert Jan,这似乎是SSIS的一个缺陷/限制,我发现自己无法使用连接执行类似的参数化更新语句


我最终使用的解决方案是使用我想要的delete语句创建一个临时存储过程,并将参数直接传递给它。

这是正确的TSql,在任何正常情况下都应该可以工作。但是,在SSIS中使用时,上面的代码仍然会引发相同的错误,这似乎是该技术的一个怪癖?在我的输入数据集中,每行将执行一次,并对每次更改的值进行比较。我相信您正在考虑在控制流中执行SQL任务,而不是在数据流中执行OLEDB命令,您的解决方案将在控制流中工作。
DELETE FROM tableA 
FROM tableA INNER JOIN tableB ON tableB.ID = tableA.ID 
WHERE tableB.OtherID = @OrderId