如何使用内部联接删除前(N)行?

rlc*_*ews 6 t-sql sql-server

我正在尝试使用以下查询从两个表中删除几行

Delete top(3) ss 
from stage.SubmitItemData ss 
INNER JOIN stage.SubmitItems s (NOLOCK) on ss.SubmitItemId = s.SubmitItemId 
where s.AgencyCode = 'NC0860000' and s.StatusId = 8
Run Code Online (Sandbox Code Playgroud)

我被难住的地方是,如果我删除参数s.AgencyCode并且s.StatusId查询执行没有问题。但是,如果我添加这些参数,我会得到(0) rows affected.

我想要做的就是控制在任何给定时间删除的记录数。top(n) 不是最好的方法,因为它看起来好像需要订购才能工作?为这种类型的删除创建一个循环会更好吗?

感谢您的任何建议。

M.A*_*Ali 8

DELETE TOP (3)
FROM stage.SubmitItemData
WHERE 
      EXISTS (SELECT 1
              FROM stage.SubmitItems
              WHERE SubmitItemId = SubmitItemData.SubmitItemId
              AND AgencyCode = 'NC0860000'
              AND StatusId = 8)
Run Code Online (Sandbox Code Playgroud)

或者你可以做这样的事情......

DELETE TOP(3) FROM ss 
FROM stage.SubmitItemData ss 
INNER JOIN stage.SubmitItems s WITH (NOLOCK) 
ON ss.SubmitItemId = s.SubmitItemId 
where s.AgencyCode = 'NC0860000' and s.StatusId = 8
Run Code Online (Sandbox Code Playgroud)