2016-12-02 39 views
1

問題標題可能看起來有點模糊。我將在這裏解釋它。如何刪除在另一個表中引用的行?

所以,我有兩個表: 1)事件 2)聯繫

事件表具有聯繫表引用的外鍵(使用ContactID)。 因此,當我刪除聯繫人時,我必須先刪除正在使用contactID被刪除的事件行,以避免任何衝突。

但我不想那樣。實際上,我使用ContactID來獲取ContactName和ContactNumber,同時在GridView中顯示事件詳細信息以及事件表中的其他列。

這就是我不希望事件被刪除的原因我只想爲ContactName和ContactNumber指定Null值。

我已經嘗試在事件表中將ContactID設置爲NULL。代碼:

string query0 = "Update Event SET [email protected] where ContactID='" + cntID + "'"; 
SqlCommand cmd0 = new SqlCommand(query0, conn); 
cmd0.Parameters.AddWithValue("contact", DBNull.Value); 
conn.Open(); 
cmd0.ExecuteNonQuery(); 
conn.Close(); 

這將事件表中的ContactID設置爲NULL就好了。但是當我嘗試在GridView中獲取事件信息並在兩個表上應用連接時,我沒有將ContactId設置爲NULL的事件記錄。 這是查詢來獲取事件信息:

SELECT Event.ID, Event.StartDate, Event.Title, Contact.Name, Contact.Cell, Event.EventType, Event.Confirmed, Event.Comments 
FROM Event 
INNER JOIN Contact ON Event.ContactID = Contact.ID 

,這是什麼解決辦法?請好心幫助我,指導我走向正確的方向。

回答

1

您對最終查詢的問題是您使用的INNER JOIN只會返回兩個表中存在的結果。如果您的活動沒有相關聯繫人,請將其更改爲LEFT JOIN;

SELECT e.ID, e.StartDate, e.Title, c.Name, c.Cell, e.EventType, e.Confirmed, e.Comments 
FROM Event e 
LEFT JOIN Contact c ON e.ContactID = c.ID 

我也更新了查詢以使用表別名。

+0

該查詢在SQL Server Management Studio上運行良好,但結果未反映在Web界面中。它仍然不顯示ContactID爲NULL的行。我究竟做錯了什麼? – EL323

+0

我不確定那一個我害怕。可能值得發佈作爲一個單獨的問題。 –

+0

好的。我會。謝謝 – EL323

相關問題