如何删除在另一个表中引用的行?
问题描述:
问题标题可能看起来有点模糊。我将在这里解释它。如何删除在另一个表中引用的行?
所以,我有两个表: 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
,这是什么解决办法?请好心帮助我,指导我走向正确的方向。
答
您对最终查询的问题是您使用的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
我也更新了查询以使用表别名。
该查询在SQL Server Management Studio上运行良好,但结果未反映在Web界面中。它仍然不显示ContactID为NULL的行。我究竟做错了什么? – EL323
我不确定那一个我害怕。可能值得发布作为一个单独的问题。 –
好的。我会。谢谢 – EL323