【问题标题】:SQL rules being ignoredSQL 规则被忽略
【发布时间】:2017-06-07 14:02:27
【问题描述】:

我在一个 SQL 数据库上有两个表:

MODELID_MODELMODELID_manuID_CLASS)和CLASSID_CLASSCLASS

它们使用ID_CLASS 链接。

删除信息的查询有一条无规则,所以当我尝试从CLASS 删除一行时,如果ID_CLASS 正在MODEL 表上使用,它应该会出错。

但它被忽略了。它正在从CLASS 表中删除CLASS,并将MODEL 表上的行从DataGridView 中删除,但仍保留在表中。

MODEL 上的 ID_CLASS 选项是 NOT NULL,如下所示:

CREATE TABLE [dbo].[MODEL] (
    [ID_MODEL] INT          IDENTITY (1, 1) NOT NULL,
    [MODEL]    VARCHAR (50) NOT NULL,
    [ID_manu]  INT          NOT NULL,
    [ID_CLASS] INT          NOT NULL,
    PRIMARY KEY CLUSTERED ([ID_MODEL] ASC),
    UNIQUE NONCLUSTERED ([MODEL] ASC)
);

即使在删除并重新创建关系之后,它仍然会发生。

还有另外两个表具有类似的配置(相同的规则和数据类型),并且可以按预期工作。每次运行删除查询时都会检索错误。

【问题讨论】:

  • 您没有在模型表上定义外键。
  • 如果没有外键,你是如何在数据库中定义这个“规则”的?

标签: sql sql-server vb.net


【解决方案1】:

您必须在 dbo.Model 上添加外键:

alter table dbo.Model
add constraint FK_Model_Class foreign key (ID_Class) references dbo.Class(ID_Class);

【讨论】:

  • 非常感谢,我只是在datadesigner上创建了关系。它现在可以工作了。