Sql 更新级联上删除级联上的外键关系
在sql server 2012中,我有表Sql 更新级联上删除级联上的外键关系,sql,sql-server,Sql,Sql Server,在sql server 2012中,我有表PurchaseReturn(VendorId,PurchaseOrderId)。列“Vendorid”是与供应商(Vendorid)的外键关系,“Purchaseorderid”是与Purchaseorder(purchaseorderi)的外键关系。 现在,我的目标是将“VendorId”的外键类型设置为“On delete set Null On Update Cascade”,但对于“purchaseorderid”,它应该是“On delete
PurchaseReturn(VendorId,PurchaseOrderId)
。列“Vendorid”是与供应商(Vendorid)的外键关系,“Purchaseorderid”是与Purchaseorder(purchaseorderi)的外键关系。
现在,我的目标是将“VendorId”的外键类型设置为“On delete set Null On Update Cascade”,但对于“purchaseorderid”,它应该是“On delete Cascade On Update Cascade”
但是,当我为VendorId创建了FK并试图通过以下查询为PurchaseOrderId创建FK时:
alter table PurchaseReturn add constraint FK_PR_PORD foreign key (Purchaseorderid) references PurchaseOrder(Purchaseorderid) on delete cascade ON UPDATE CASCADE ';
出现如下错误:
在表“PurchaseReturn”上引入外键约束“FK_PR_PORD”可能会导致循环或多个级联路径。指定“在删除时不执行操作”或“在更新时不执行操作”,或修改其他外键约束
有什么问题吗?。。。请帮忙,先谢谢
这是带有约束的create table查询alonq
USE [AsifTraders]
GO
/****** Object: Table [dbo].[PurchaseReturn] Script Date: 24-Sep-14 11:46:39 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[PurchaseReturn](
[Date] [datetime] NOT NULL,
[PurchaseReturnId] [nvarchar](20) NOT NULL,
[VendorId] [nvarchar](8) NULL,
[Description] [nvarchar](50) NOT NULL,
[ReturnType] [nvarchar](20) NOT NULL,
[Deduction] [numeric](15, 0) NULL,
[ProductQuantity] [numeric](10, 2) NOT NULL,
[PurchaseValue] [numeric](12, 0) NOT NULL,
[ReturnValue] [numeric](15, 0) NOT NULL,
[Paid] [numeric](15, 0) NULL,
[PBalance] [numeric](15, 0) NULL,
[NBalance] [numeric](15, 0) NULL,
[JEntryId] [int] NOT NULL,
[PURCHASEORDERID] [nvarchar](8) NULL,
CONSTRAINT [PK_PurchaseReturn] PRIMARY KEY CLUSTERED
(
[PurchaseReturnId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[PurchaseReturn] WITH CHECK ADD CONSTRAINT [FK_PR_VEN] FOREIGN KEY([PURCHASEORDERID])
REFERENCES [dbo].[PurchaseOrder] ([PurchaseOrderId])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[PurchaseReturn] CHECK CONSTRAINT [FK_PR_VEN]
GO
这是对PurhcaseOrder的查询
USE [AsifTraders]
GO
/****** Object: Table [dbo].[PurchaseOrder] Script Date: 24-Sep-14 11:56:53 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[PurchaseOrder](
[Date] [datetime] NULL,
[PurchaseOrderId] [nvarchar](8) NOT NULL,
[JEntryId] [int] NULL,
[VendorId] [nvarchar](8) NULL,
[PurchaseType] [nvarchar](10) NULL,
[Description] [nvarchar](50) NOT NULL,
[ItemQuantity] [numeric](18, 0) NOT NULL,
[DeleiveryCharges] [numeric](18, 0) NULL,
[Discount] [numeric](18, 0) NULL,
[Total] [numeric](18, 0) NOT NULL,
[Paid] [numeric](18, 0) NULL,
[PBalance] [numeric](18, 0) NULL,
[NBalance] [numeric](18, 0) NULL,
PRIMARY KEY CLUSTERED
(
[PurchaseOrderId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[PurchaseOrder] WITH CHECK ADD CONSTRAINT [fk_purch_ven] FOREIGN KEY([VendorId])
REFERENCES [dbo].[Vendor] ([VendorId])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[PurchaseOrder] CHECK CONSTRAINT [fk_purch_ven]
GO
所以,我迷路了。PurchaseReturn的表定义已将PurchaseOrder的外键约束设置为cascade。你想再加一个吗?为什么?你想改变它吗?它的名称似乎不正确(名称中有
VEN
)。在尝试修复它或添加当前将指向同一个表的不同约束之前删除它…@AaronBertrand,第一个外键是在列“VendorId”上创建的。但是我想在“PurchaseorderId”列上添加另一个FK,该列引用了Purchaseorder(PurchaseorderId),呃,不,第一个外键不是在列VendorId
上创建的。你看了吗<代码>使用检查添加约束[FK_PR_VEN]外键([PURCHASEORDERID])更改表[dbo]。[PurchaseReturn]引用[dbo]。[PURCHASEORDERID])Ohh。。。那是个错误。。但现在我想在供应商(VendorId)上创建一个FK,在这种情况下是什么?我实际上是这样做的,并得到错误