Sql server 使用内部联接删除
我遵循了如何从以下位置执行删除: 我要删除的数据:Sql server 使用内部联接删除,sql-server,sql-delete,Sql Server,Sql Delete,我遵循了如何从以下位置执行删除: 我要删除的数据: select * from com.Address a inner join com.Contact as c on c.AddressId = a.AddressId inner join cqt.CQMTrainer as t on t.ContactId = c.ContactId select from com.Contact c inner join cqt.CQMTrainer as t on t.Contac
select * from com.Address a
inner join com.Contact as c on c.AddressId = a.AddressId
inner join cqt.CQMTrainer as t on t.ContactId = c.ContactId
select from com.Contact c
inner join cqt.CQMTrainer as t on t.ContactId = c.ContactId
以下是我试图执行的删除操作:
delete a from com.Address a
inner join com.Contact as c on c.AddressId = a.AddressId
inner join cqt.CQMTrainer as t on t.ContactId = c.ContactId
delete c from com.Contact c
inner join cqt.CQMTrainer as t on t.ContactId = c.ContactId
但是,一旦执行它们,就会出现一些外键错误:
DELETE语句与引用约束冲突
“FK_com.Contact_com.Address_AddressId”。冲突发生在
数据库“”,表“com.Contact”,列“AddressId”
我在错误地遵循什么?我甚至尝试添加
begintransaction
和commit transaction
查看您的查询您的关系已配置为在您尝试删除另一条记录引用的记录时引发异常。如果要避免这种情况,必须选择数据库服务器应如何处理这种情况。这是在参考属性上设置的。如果您使用的是SQL Server Management Studio,则:
- 无操作-抛出与您的情况类似的异常
- 级联-删除引用行
- Set Null-将在通过FK值引用此行的行中设置Null
- 设置默认值-将为该列设置默认值
REFERENCES TableName ColumnName
价值观,如:
ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }
如果你用另一种方式做呢:
delete c from com.Contact c
inner join cqt.CQMTrainer as t on t.ContactId = c.ContactId
delete a from com.Address a
inner join com.Contact as c on c.AddressId = a.AddressId
inner join cqt.CQMTrainer as t on t.ContactId = c.ContactId
- 首先,您将删除联系人表上的信息,因为出现错误
表示您在联系人上有地址id的引用,这就是为什么您不能先删除地址表