0

我必须编写脚本来提取电子邮件已被硬退回的所有成员的 ID。为了做到这一点,我写了这个

 Select id FROM Members m
 Join tbl_memberlanguageid mli on m.ID = mli.MLI_MemberID 
 Where Cast(dateCreated as date) >= '01-Dec-2014'
 and mli.MLI_LanguageID = 3 
 and EmailHardBounces = 1

然后我需要使用这个 ID 列表将它们从表成员中删除。如果 ID 在该列表中,我如何编写此脚本以便从成员中删除与 ID 相关的所有内容?

4

3 回答 3

2

您可以将其更改Select idDelete m

BEGIN TRAN

DELETE  m
FROM    Members m
        JOIN tbl_memberlanguageid mli ON m.ID = mli.MLI_MemberID
WHERE   CAST(dateCreated AS DATE) >= '01-Dec-2014'
        AND mli.MLI_LanguageID = 3
        AND EmailHardBounces = 1

ROLLBACK
COMMIT

只需在提交删除之前确认记录计数正确。

于 2014-12-12T15:23:12.243 回答
2

我喜欢 CTE,因为它们允许查看我要删除的内容:

WITH MemberIdsToDelete AS
(
     Select id FROM Members m
     Join tbl_memberlanguageid mli on m.ID = mli.MLI_MemberID 
     Where Cast(dateCreated as date) >= '01-Dec-2014'
     and mli.MLI_LanguageID = 3 
     and EmailHardBounces = 1
)
SELECT id FROM MemberIdsToDelete

如果您最终想删除它们,请替换

SELECT id FROM MemberIdsToDelete

DELETE FROM Members WHERE id IN (SELECT id FROM MemberIdsToDelete).

于 2014-12-12T15:25:25.580 回答
1

另一种方式:

DELETE FROM Members WHERE ID IN(Select id FROM Members m
Join tbl_memberlanguageid mli on m.ID = mli.MLI_MemberID 
Where Cast(dateCreated as date) >= '01-Dec-2014'
and mli.MLI_LanguageID = 3 
and EmailHardBounces = 1)
于 2014-12-12T15:25:32.557 回答