我有一个项目来实现从Customers
插入,更新和删除Northwind -> Customers
的表单。我设法进行插入,更新,并在每次操作后刷新它,但删除不起作用并抛出FK异常。我需要级联删除,但我不知道如何..
我的表单如下:
和我的删除程序(到目前为止,没有级联):
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
表。
答案 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.