CREATE TABLE Prueba
(
Id int IDENTITY(1,1) NOT NULL,
Descripcion varchar(50) NOT NULL,
CONSTRAINT [PK_id] PRIMARY KEY CLUSTERED
(
Id 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
这是子表
CREATE TABLE Detalle
(
Id_detalle int IDENTITY(1,1) NOT NULL,
Id int NOT NULL
CONSTRAINT PK_Detalle PRIMARY KEY CLUSTERED
(
Id_detalle 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 FK_MiTablaHija_RegistroTablaPadreDebeExistir WITH CHECK ADD CONSTRAINT FK_MiTablaHija_RegistroTablaPadreDebeExistir FOREIGN KEY(Id)
REFERENCES Prueba (Id)
GO
ALTER TABLE Detalle CHECK CONSTRAINT FK_MiTablaHija_RegistroTablaPadreDebeExistir
GO
Alter Table Detalle
Drop Constraint FK_MiTablaHija_RegistroTablaPadreDebeExistir
GO
Alter Table Detalle
Add Constraint FK_MiTablaHija_RegistroTablaPadreDebeExistir Foreign Key (CampoHijo) References MiTablaPadre(CampoPadre) On Update No action On Delete No action
从您正在执行的查询中,您可以从where开始删除
你的代码:
您修改后的代码:
另一个选项是使用 TRUNCATE
但重要的是你知道delete和truncate之间的区别,这里我分享一个区别表(来源:Differences between delete and truncate)
好吧,删除
WHERE
条件就足够了:来源:https ://www.w3schools.com/sql/sql_delete.asp
就放
DELETE FROM *Nombre_de_tu_tabla*
它会为你服务
你可以使用截断代码,你必须记住,如果你使用它,你必须验证你将截断的表没有外键约束,如果是这种情况,你必须在截断之前删除影响它的关系,如果是别人通过外键引用的表,你应该检查删除表中记录的影响是否对它没有影响,如果是这样,只针对这些影响建立级联删除,然后我举个例子;
此表是父表
这是子表
明细表是指测试表的Id,在这种情况下对应,是为了便于级联删除,即如果在Test表中删除了一条记录,表中的所有记录都会被删除引用Test表中的该字段,您必须先修改Constraint,并在删除时修改其动作,如果要在更新中修改,出于演示目的,我将约束包括在更新时的动作(尽管情况并非如此这里),
删除约束后,您继续创建新的...
在此之后,您将能够毫无问题地在表中执行截断并且不会产生错误,如果它是在开发环境中而不是在生产环境中(客户端的数据库及其信息已经通过应用程序),然后您可以通过执行删除修改后的约束的相同过程返回删除策略以在删除时不执行任何操作...
完成...在这里您已将关系恢复为执行截断之前的状态...
此链接可以帮助您查看上面写的内容...
https://social.msdn.microsoft.com/Forums/es-ES/3bb52114-9c6e-48b5-bb1c-a6e360e23f8a/update-and-remove-in-cascade-sql-server-2005?forum=sqlserveres