【问题标题】:MSSQL Delete query on a table with foreign key使用外键对表进行 MSSQL 删除查询
【发布时间】:2015-11-10 11:18:44
【问题描述】:

我有两张桌子

t1 - 类别 ID 名称

t2 - 产品 ID 姓名 类别编号

我有一个外键,它正在工作,但是当我想运行删除查询时(例如 O 因为外键而不断收到错误。)

这是我的代码:

        protected void dlCategory_DeleteCommand(object source, DataListCommandEventArgs e)
{
    string Id = ((Label)e.Item.FindControl("Label1")).Text;
    string SQL = "DELETE FROM Categories WHERE PrimaryKey=@ID;";
    SqlCommand cmd = new SqlCommand(SQL, conn);
    cmd.Parameters.AddWithValue("@ID", Id);

    conn.Open();
    cmd.ExecuteNonQuery();
    conn.Close();

    BindDL();
}

如果我删除外键,它就可以正常工作!

【问题讨论】:

    标签: asp.net sql-server foreign-key-relationship


    【解决方案1】:

    据我所知,您无法使用主键作为参数运行查询,您需要采用长期的方式。

    string SQL = "DELETE FROM Categories WHERE PrimaryKey= '$Cat_ID';";
    

    类似的答案在这里 Mysql Select record where PRIMARY key = x

    【讨论】:

      【解决方案2】:

      您似乎正试图从类别中删除一条记录,但该记录无法删除,因为它正被 Products 表使用。

      如果您有一个“衣服”类别和一个“t-shirt”产品,该产品的类别是衣服,那么删除该类别会导致数据错误,因为数据库现在不一致。

      这是预期的功能。您可以修改 SQL Server 以使用级联删除,因此所有连接的记录也会被删除,但请谨慎使用。

      【讨论】:

      • 我创建了一个新类别,它没有被任何产品使用。无论如何,你能给我一个例子来说明级联删除是如何工作的吗?!谢谢
      • 除了您要删除的记录之外,两个表都是空的吗?
      • 级联删除将删除具有从类别表中删除的类别 ID 的任何产品。这些是在数据库中设置的表之间的关系。在属性中的“插入和更新规范”部分下,将“删除规则”设置为“级联”。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-15
      • 1970-01-01
      • 2021-06-30
      相关资源
      最近更新 更多