Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 更新级联上删除级联上的外键关系_Sql_Sql Server - Fatal编程技术网

Sql 更新级联上删除级联上的外键关系

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

在sql server 2012中,我有表
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,在这种情况下是什么?我实际上是这样做的,并得到错误