从列中删除特定值

Delete specific values from column

我想从具有 WHERE 条件的一列中删除特定的 values/data。

Table CIVILITE:

ID_CIVILITE CIV_LIBELLE
1           M.
2           Mme
3           Mlle
4           Aucun

DELETE FROM CIVILITE WHERE CIV_LIBELLE='Aucun';

错误:

The DELETE statement is in conflict with the constraint REFERENCE "FK_PERS_CIVILITE". The conflict occurred in database "DBDB", "dbo.PERSONNE" table, column 'ID_CIVILITE'.

如何在有约束的地方删除一些值..?

似乎 table CIVILITE 列 ID_CIVILITE 是主键,首先删除引用 table 中的相似行,即外键 table.

-- Run 1st
DELETE FROM [PERSONNE]
WHERE ID_CIVILITE IN
(SELECT CIVILITE WHERE CIV_LIBELLE='Aucun')
-- Run 2nd
DELETE CIVILITE WHERE CIV_LIBELLE='Aucun'

您收到此错误的原因是您试图删除被另一行引用的行,从而导致错误。因此,要么删除引用行,要么暂时删除约束。您需要先像这样更改 table:

ALTER TABLE [DBDB].[dbo].[PERSONNE] NOCHECK CONSTRAINT [FK_PERS_CIVILITE]

然后就可以删除记录了

确保在删除记录后再次应用约束。

ALTER TABLE [DBDB].[dbo].[PERSONNE] WITH CHECK CONSTRAINT [FK_PERS_CIVILITE]

要么你 DROP constraint,要么 - 可能更好 - 你更新 Personnes 中的数据,以便没有记录具有值 "Aucun"。如果允许,您可以将其设置为否 Null

你可能有一个像 PERSON 这样的 table,它有一个像这样的外键约束:

create table person (
    -- various columns
    civilite_id int,
    foreign key component civilite_id references civilite(id_civilite)
);

并且这个 table 必须有一些 civilite_id = 4 的行。

您必须:

  • 解除限制
  • 删除包含此 civilite 的行
  • 将行更新为空文明(如果可以的话)
  • 将行更新为不同的文明