比较来自不同表的两个记录并删除匹配的记录

时间:2010-07-22 22:02:18

标签: sql sql-server

我的问题是我正在比较来自不同表的两个记录并删除那些匹配的记录。

我找到了这段代码:

DELETE emails 
  FROM emails 
 INNER JOIN CustRecords ON CustRecords.Email = emails.email

哪种方法效果很好,但我还希望获得已删除的记录数的返回值。

现在,如果我直接执行SQL查询,这是给我的,但如果我使用我的asp程序,它就不会显示。

我知道我必须使用count()函数,但我还是一个初学者。

如果可能,我希望将计数结果作为count = (how many records deleted)等变量?

4 个答案:

答案 0 :(得分:3)

如何在第一次查询后追加其他查询?

DELETE emails FROM emails INNER JOIN CustRecords ON CustRecords.Email = emails.email ; SELECT @@rowcount AS 'RowsChanged'

答案 1 :(得分:0)

更好的方法,假设您正在使用ASP数据库查询:

您应该注意SqlCommand.ExecuteNonQuery()返回受整数影响的行数。像这样(添加try / catch'es等):

        SqlConnection con = new SqlConnection("...");
        SqlCommand cmd = new SqlCommand("DELETE emails ... ", con);
        cmd.CommandType = CommandType.Text;
        con.Open();

        int rowsAffected = cmd.ExecuteNonQuery(); //Note this line
        // ...

答案 2 :(得分:0)

好吧,我想我已经设法解决了这个问题......似乎是你不能在ASP行中使用@@ ROWCOUNT所以我通过使用这两行来解决问题:

strSQL_count = "SELECT COUNT(email) AS 'count' FROM emails INNER JOIN CustRecords ON CustRecords.Email = emails.email"
Set rs = conn.Execute(strSQL_count)

count = rs("count")

strSQL = "DELETE emails FROM emails INNER JOIN CustRecords ON CustRecords.Email = emails.email"
Set rs = conn.Execute(strSQL)

我知道他们这样做是一种简单的方式,但我只是一个初学者!

感谢rlb.usa为您提供帮助

答案 3 :(得分:0)

您可以使用OUTPUT子句将已删除的标识列表发送到表变量(或临时表),然后从中选择一个计数。也就是说,如果您正在使用SQL Server 2005或2008.为了最好地使用它,我将它放在存储过程中,以便您可以执行它并返回输出,而不必在ASP中处理多个查询代码。

代码:

DECLARE @TempTable TABLE(ID INT)

DELETE Emails
OUTPUT deleted.ID INTO @TempTable
FROM Emails INNER JOIN CustRecords ON CustRecords.Emails = Emails.Emails

SELECT COUNT(*) AS DeletedRecords FROM @TempTable

我已经测试了这个并且它有效,所以它应该适合你。