级联删除客户的存储过程?

时间:2012-12-31 01:57:19

标签: c# sql wpf cascade

我有一个项目来实现从Customers插入,更新和删除Northwind -> Customers的表单。我设法进行插入,更新,并在每次操作后刷新它,但删除不起作用并抛出FK异常。我需要级联删除,但我不知道如何..

我的表单如下:

enter image description here

和我的删除程序(到目前为止,没有级联):

CREATE Procedure [dbo].[DeleteCustomer]
(
    @Original_CustomerID nchar(5)
)
AS
  SET NOCOUNT OFF; 

  DELETE FROM [dbo].[Customers]
  WHERE 
  (
    (
        [CustomerID] = @Original_CustomerID
    )
)

在某些情况下有效,但在其他情况下,我收到错误:

  

DELETE语句与REFERENCE约束“FK_Orders_Customers”冲突。冲突发生在数据库“Northwind”中,   表“dbo.Orders”,列'CustomerID'。声明一直如此   终止。

任何人都可以通过在删除时添加级联来帮助我完成这个项目吗?

这是Northwind Traders数据库,Customer表。

2 个答案:

答案 0 :(得分:0)

处理此问题的一种简单方法是在SQL企业管理器(或您选择的ISQLW解释器)中将约束作为级联删除约束删除并读取:

USE Northwind
GO
ALTER TABLE Orders
  DROP CONSTRAINT
    FK_Orders_Customers
GO
ALTER TABLE Orders
  ADD 
    CONSTRAINT FK_Orders_Customers FOREIGN KEY
    (
        CustomerID
     ) REFERENCES Customers
        CustomerID
     ) ON CASCADE DELETE
GO

如果您想拥有严格存储的过程解决方案,可以使用原始存储过程的此修订版本:

CREATE Procedure [dbo].[DeleteCustomer] (
    @Original_CustomerID nchar(5)
)
AS

SET NOCOUNT OFF; 

  DELETE 
    FROM [dbo].[Orders]
   WHERE [CustomerID] = @Original_CustomerID

  DELETE 
    FROM [dbo].[Customers]
   WHERE [CustomerID] = @Original_CustomerID

答案 1 :(得分:0)

我在哪里放你的代码?我是否保存/作为存储过程运行? 它仍然抛出异常..:/ 我的删除:

private void buttonDelete_Click(object sender, RoutedEventArgs e)
{            
    SqlConnection cn = new SqlConnection(@"Integrated Security=SSPI;Initial Catalog=Northwind;Data Source=(local)");
    SqlCommand cmd = new SqlCommand("DeleteCustomer", cn);
    cmd.CommandType = CommandType.StoredProcedure;

    cmd.Parameters.AddWithValue("@Original_CustomerID", textBox_CompanyID.Text);

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

    lbxCustomers.Items.Clear();
    this.init();
}

我的DeleteCustomer程序:

CREATE Procedure [dbo].[DeleteCustomer]
(
    @Original_CustomerID nchar(5)
)
AS

SET NOCOUNT OFF; 

DELETE FROM [dbo].[Customers]
WHERE 
(
    (
        [CustomerID] = @Original_CustomerID
    )
)

我有你的代码,但不知道如何将它添加到我的项目中以使其工作。因此,当我重新启动应用程序或切换计算机时,它仍然有效请帮助..我认为这是新的错误。似乎连接了3个表:

The DELETE statement conflicted with the REFERENCE constraint "FK_Order_Details_Orders". The conflict occurred in database "Northwind", table "dbo.Order Details", column 'OrderID'.
The statement has been terminated.
相关问题