【问题标题】:How to delete a row being referenced in another table?如何删除另一个表中引用的行?
【发布时间】:2016-12-02 09:41:31
【问题描述】:

问题标题可能看起来有点模糊。我将在这里解释它。

所以,我有两张桌子: 1) 事件 2) 联系方式

事件表有一个从联系人表引用的外键 (ContactID)。 因此,当我删除一个联系人时,我必须先删除使用正在删除的联系人 ID 的事件行,以避免任何冲突。

但我不想那样。实际上,我使用 ContactID 来获取 ContactName 和 ContactNumber,同时在网格视图中显示事件详细信息以及事件表中的其他列。

这就是我不想删除事件的原因,我只想要 ContactName 和 ContactNumber 的 Null 值。

我尝试在事件表中将 ContactID 设置为 NULL。代码:

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

这将事件表中的 ContactID 设置为 NULL 就好了。但是,当我尝试在网格视图中获取事件信息并在两个表上应用连接时,我没有获得将 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

解决方法是什么?请帮助我并引导我朝着正确的方向前进。

【问题讨论】:

    标签: c# asp.net sql-server


    【解决方案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
    

    我还更新了查询以使用表别名。

    【讨论】:

    • 此查询在 SQL Server Management Studio 上运行良好,但结果未反映在 Web 界面中。它仍然没有显示 ContactID 为 NULL 的行。我做错了什么?
    • 恐怕我不确定那个。可能值得作为一个单独的问题发布。
    猜你喜欢
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-09
    • 2011-05-18
    相关资源
    最近更新 更多