2010-07-22 52 views
2

我的問題是我比較來自不同表格的兩條記錄並刪除那些匹配的記錄。比較來自不同表格的兩條記錄並刪除那些匹配的條目

我發現這段代碼:

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

效果很好,但我也想有多少記錄已被刪除返回值。

現在,如果我做了一個SQL查詢直接給我,但如果我使用我的ASP程序它不顯示的東西。

我知道我必須使用count()函數,但我只是一個初學者。

如果可能我希望計數結果作爲像count = (how many records deleted)這樣的變量?

+0

這是連接嗎?你是否考慮過RecordsAffected的觀點? – Fionnuala 2010-07-22 22:08:00

回答

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

如何在第一次後附加另一個查詢?

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

+0

@@ ROWCOUNT文檔:http://technet.microsoft.com/en-us/library/ms187316.aspx – 2010-07-22 22:11:01

+0

@OMGPonies我的SQL不是太好 - 有沒有辦法做'SELECT @@ rowcount AS'RowsChanged' FROM(刪除電子郵件...)'??把我的大腦絞盡腦汁,試圖想出一個單一查詢。 – 2010-07-22 22:14:32

+0

不是我見過 - 即使在Oracle中,它也是一個單獨的查詢來獲取信息。 – 2010-07-22 22:21:48

0

更好的方法,假設你使用的ASP數據庫查詢:

你應該注意的是,SqlCommand.ExecuteNonQuery()收益影響爲整數的行數。像這樣(加試/ 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 
     // ... 
+0

嗯..我有點困惑與最後的方法,我將如何實現這個到我的stSQL =「....」。謝謝你的嘗試,但我只是一個願意學習的初學者! – 2010-07-22 22:25:35

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 

我測試過這一點,它的工作原理,所以它應該爲你工作。

+0

感謝您的回答,我仍然在學習存儲過程,一旦我掌握瞭如何做到這一點,我一定會使用您的代碼。 – 2010-07-23 06:57:33

相關問題