标签: constraint

限制记录数取决于主键的部分

我为足球比赛创建了数据库。

我有 2 个具有多对多关系的表,因此我还创建了一个连接表:

裁判

CREATE TABLE referee (
  id_referee INT IDENTITY PRIMARY KEY,
  id_type_referee INT NOT NULL,
  first_name varchar(20) NOT NULL,
  last_name varchar(30) NOT NULL,
  date_of_birth DATE NOT NULL,
  FOREIGN KEY(id_type_referee) REFERENCES type_referee(id_type_referee)
);
Run Code Online (Sandbox Code Playgroud)

比赛

CREATE TABLE match (
  id_match INT IDENTITY PRIMARY KEY,
  id_stadium INT NOT NULL REFERENCES stadium(id_stadium),
  id_season INT NOT NULL REFERENCES season(id_season),
  date_of_match DATE NOT NULL,
  audience INT CHECK (audience>=0)
);
Run Code Online (Sandbox Code Playgroud)

接线台

CREATE TABLE match_referee(
  id_referee INT NOT NULL,
  id_match INT NOT NULL,
  PRIMARY KEY(id_referee,id_match), …
Run Code Online (Sandbox Code Playgroud)

database-design sql-server constraint

1
推荐指数
1
解决办法
59
查看次数

TSQL 重新启用约束需要很长时间

有什么办法可以加快重新启用约束的速度?

作为更新我们仓库中几个表的工作的一部分,这是在几个小时内完成的,重新启用对所述表的约束可能需要一个多小时。其余的工作,即更新,大约需要 5 分钟。在更新开始之前禁用相同的约束是亚秒。

编辑 有问题的工作是在给定日期之前更新数据行上的 PK 和 FK,以防止这些记录出现在报告中。soft delete如果你愿意,一种记录方式。

大多数表格行大小均大于 130m 行,但超过 370m 行的除外。其他两个较小。

TableName   rows
Table_1     371255778
Table_2     131703902
Table_3     131665535
Table_4     131665535
Table_5     131665535
Table_6     131665535
Table_7     19364988
Table_8     1458800
Run Code Online (Sandbox Code Playgroud)

我正在使用以下命令禁用每个表上的约束

ALTER TABLE database.dbo.table_name NOCHECK CONSTRAINT ALL;

以及以下再次重新启用它们

ALTER TABLE database.dbo.table_name WITH CHECK CHECK CONSTRAINT ALL;

没有同时运行的报告或其他作业。

是否需要很长时间才能重新启用约束预期行为,或者是否可以采取一些措施来加快速度?

提前致谢

sql-server constraint sql-server-2008-r2

1
推荐指数
1
解决办法
918
查看次数

验证 GST 识别号 (GSTIN)

下图描述了 GST 标识号的格式:

在此处输入图片说明

  • 根据 2011 年印度人口普查,前 2 位数字表示唯一的州代码。例如,新德里的州代码是“07”,卡纳塔克邦的州代码是“29”。

  • 接下来的 10 个字符表示纳税人的PAN永久帐号)。

  • 第 13 位数字表示具有相同PAN 的纳税人的注册号(或实体号)。

  • 默认情况下,第 14 位数字是“Z”——目前没有任何意图。

  • 第 15 位数字是校验和数字- 可以是数字或字母字符。

也许我可以通过 PATINDEX 或 Regex 进行验证?

sql-server constraint sql-server-2008-r2 data-validation

1
推荐指数
1
解决办法
6127
查看次数

检查和约束检查有什么区别?

以下示例之间有什么区别吗?

ProjNum int 
    CONSTRAINT nn_ProjNum NOT NULL 
        CONSTRAINT C_ProjNum CHECK (ProjNum >= 10)
Run Code Online (Sandbox Code Playgroud)

ProjNum int NOT NULL 
    CHECK (ProjNum >= 10)
Run Code Online (Sandbox Code Playgroud)

谢谢。

sql-server constraint check-constraints

1
推荐指数
1
解决办法
2432
查看次数

为列值创建条件规则

我目前正在 SQL Server 中处理下表

Table: order_status_logs
    log_id      INT NOT NULL IDENTITY(1,1)
    order_id    INT NOT NULL
    status_id   INT NOT NULL
    log_date    DATE NOT NULL
    expected_by DATE NULL
Run Code Online (Sandbox Code Playgroud)

在此status_id列的表中,可能有以下值:

[1] - Pending
[2] - Ordered
[3] - Backordered
[4] - Received
Run Code Online (Sandbox Code Playgroud)

我想设置我的表,以便在尝试创建新记录时,如果不等于 4 ,expected_by则从NULL到 。基本上除非已收到订单,否则该表将始终需要该列的数据。NOT NULLstatus_idexpected_by

可以用 a 来做到这一点CONSTRAINT吗?或者这是我需要通过返回错误消息的程序或如果我不提供该列数据的内容来执行的操作?

sql-server constraint

1
推荐指数
1
解决办法
1835
查看次数

选择子查询 CHECK 约束 DB2

我有 2 个表:TVSHOW 和 ACTOR。如果使用 DB2 的 ACTOR 表中不存在 TVSHOW 中插入的演员,我想拒绝记录。

db2 "ALTER TABLE TVSHOW ADD CONSTRAINT check_actor CHECK (actor in (select id from ACTOR))"
Run Code Online (Sandbox Code Playgroud)

我不断地遇到, During SQL processing it returned: SQL0546N The check constraint "check_actor" is invalid.

我怎样才能解决这个问题?

constraint db2

1
推荐指数
1
解决办法
555
查看次数

存储过程从具有变量约束的变量创建表

我设法使用存储过程创建了一个带有变量名的表的副本。但是我很难理解如何将约束合并到存储过程中。

问题:约束必须是一个变量,因为当它复制一个表时,它不能命名我拥有的与以前使用的相同的 PK。我在这些领域遇到语法错误。

我对 SQL Server 非常陌生......今天才刚刚开始学习!!所以请用虚拟术语解释。

到目前为止的代码如下:

    CREATE PROCEDURE procFinancialPeriodTable
        (@TABLENAME as varchar (50))
    AS
        DECLARE @SQL varchar(2000)
        --SET @SQL = "if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[@TABLENAME]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
        --drop table [dbo].[@TABLENAME]
    BEGIN
        SELECT @SQL = 'CREATE TABLE ' + @TABLENAME + '('

        SELECT @SQL = @SQL + '[ID] [int] IDENTITY(1,1) NOT NULL,[FinPeriodNr] [int] NOT NULL,[FinCurrentPeriod] [bit] NULL,[FinStart] [date] NULL,[FinEnd] [date] NULL,[FinStatusOpen] [bit] NOT NULL,[PeriodClosedTS] [smalldatetime] NULL,[PeriodClosedUID] [varchar](3) NULL,)'
    CONSTRAINT [PK_FinancialPeriod' + …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 constraint stored-procedures

0
推荐指数
1
解决办法
1万
查看次数

如何在不丢失自动创建的索引的情况下删除约束?

如何在不丢失自动创建的索引的情况下删除约束?

如果可以使用单个查询。

index oracle constraint syntax

0
推荐指数
1
解决办法
2345
查看次数

递归外键的排除约束(以树为例)

我有带有递归外键的表。它只是层次树结构:

CREATE TABLE tree (
    id              INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    value           INTEGER NOT NULL,
    tree_id         SMALLINT NOT NULL CHECK (tree_id > CAST(0 AS SMALLINT)),
    parent_id       INTEGER REFERENCES tree ON DELETE RESTRICT ON UPDATE RESTRICT,

    EXCLUDE (tree_id WITH =) WHERE (parent_id IS NULL) -- allow only one root within tree
);
Run Code Online (Sandbox Code Playgroud)

如何拒绝插入非空parent_id和不同的记录tree_id?即外键parent_id只能引用id同一个内的主键tree_id

postgresql tree foreign-key constraint recursive

0
推荐指数
1
解决办法
221
查看次数

为什么 ADD CONSTRAINT ... NOT VALID 需要很长时间?

我向这样的某些列添加了 NOT NULL 约束,希望命令非常快,因为NOT VALID. 但是,大约需要 60-100 秒,并且似乎一直锁定表(基于在此期间失败的其他事情)。这是在一个大约有 8,600,000 行的表上。为什么会这样?执行 4 个命令而不是 1 个命令会更好吗?

Postgres 12

ALTER TABLE my_table
  ADD CONSTRAINT my_table_column1_not_null CHECK (column1 IS NOT NULL) NOT VALID,
  ADD CONSTRAINT my_table_column2_not_null CHECK (column2 IS NOT NULL) NOT VALID,
  ADD CONSTRAINT my_table_column3_not_null CHECK (column3 IS NOT NULL) NOT VALID,
  ADD CONSTRAINT my_table_column4_not_null CHECK (column4 IS NOT NULL) NOT VALID;
Run Code Online (Sandbox Code Playgroud)

postgresql constraint alter-table

0
推荐指数
1
解决办法
606
查看次数

如何生成约束sql?

我正在寻找一种可以生成创建 SQL 的方法,例如SQL选择约束时的 PgAdmin 选项卡。(pg admin 是怎么做的?)

我想实现一个通用方法,可以在处理后删除并重新创建外键约束。

postgresql constraint scripting

0
推荐指数
1
解决办法
585
查看次数

插入时忽略 DATE 约束

我一定是在某个地方遗漏了一些东西..

Azure SQL

DispatchedOn is a DateTime column

ALTER TABLE [table] WITH CHECK ADD CONSTRAINT [CK_ReportDate6MonthRollGreater] CHECK  ((CONVERT([date],[DispatchedOn])>='2022-12-07'))
GO

ALTER TABLE [table] CHECK CONSTRAINT [CK_ReportDate6MonthRollGreater]
GO
Run Code Online (Sandbox Code Playgroud)

我可以插入日期 2022-12-01

在此输入图像描述

sql-server constraint azure-sql-database check-constraints

0
推荐指数
1
解决办法
147
查看次数

-2147483648 整数类型列中的值,尽管输入掩码

我有一个带有文本框字段的桌面应用程序,它是一个带有掩码值的RadMaskedNumericInput#6,这意味着它只能有 6 位数字。我将它存储在int类型的数据库列中。

当我检查数据库时,列中的某些值是 -2147483648。

我已尝试输入许多值,但无法重现此场景。我只能在此屏幕中输入 6 位数字。我尝试了最大值 999999,但它保持不变。

我只是获取文本框值,将其转换为int,然后通过存储过程将其插入到数据库中。

int value = (int)txtPrice.value;
Run Code Online (Sandbox Code Playgroud)

我试图输入负值以及尝试添加字母,但由于掩码,它不允许我添加除整数以外的任何值。

根据我的理解和知识,只有桌面应用程序可以插入或更新此列的值。

有谁知道为什么会这样?我该如何预防?

sql-server constraint data-integrity

-1
推荐指数
1
解决办法
460
查看次数