问题标签 [check-constraints]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql-server - SQL Server - 值来自另一个表的列上的 CHECK 约束
如何在没有硬编码的情况下对列施加 CHECK 约束,使其可接受值的范围来自另一个表?
这是一个简化的示例:
我想在 OneManyTable.TaskID 列上放置一个 CHECK 约束,以便可接受的值来自另一个表的列,即来自 MetadataTable.Value where MetadataTable.class='A'
我已经尝试创建格式的 CHECK 约束
但这不受支持。
另一方面, ('Val1', 'Val2') 中的 TaskID 在 SQL2k8 中用作检查约束(不在 SQL2000 中!),但由于硬编码,它是不可接受的。
如何实现我想要的,无论是通过 CHECK 约束还是我不知道的其他一些花哨的机制?
PS。必须在数据库端,没有人向我建议的客户端检查。
sql - SQL 我可以对表有“条件唯一”约束吗?
在我的职业生涯中,我曾多次遇到过这个问题,但我当地的同龄人似乎都无法回答这个问题。假设我有一个表,其中有一个“描述”字段,它是一个候选键,除了有时用户会在过程中途停止。因此,对于可能 25% 的记录,此值为空,但对于所有非空的,它必须是唯一的。
另一个示例可能是必须维护记录的多个“版本”的表,并且位值指示哪个是“活动”的。因此“候选密钥”总是被填充,但可能存在三个相同的版本(有效位中的 0)和只有一个有效的版本(有效位中的 1)。
我有解决这些问题的替代方法(在第一种情况下,在存储过程或业务层中强制执行规则代码,在第二种情况下,使用触发器填充存档表并在需要历史记录时对表进行 UNION) . 我不想要替代品(除非有明显更好的解决方案),我只是想知道是否有任何风格的 SQL 可以以这种方式表达“条件唯一性”。我正在使用 MS SQL,所以如果有办法做到这一点,那就太好了。我主要只是在学术上对这个问题感兴趣。
sql-server-2008 - 检查约束以验证 IP 地址字段
我正在从事一个涉及 C# 和 SQL Server 2008 数据库的项目。在其中一张表中,我有一个nvarchar(15)
包含 IP 地址的字段 ( )。
我想添加一个检查约束,它将验证输入值实际上是一个 IP 地址。
我想使用正则表达式来做到这一点,但默认情况下似乎不支持此功能。我看到了关于在里面写一个带有 UDF 的 customm dll 的事情(MSDN 教程),但我真的不明白它是如何工作的(即我应该将 dll 放在哪里?)
有没有一种“简单”的方法来添加这样的约束?欢迎任何解决方案。
提前致谢 !
mysql - MySQL 是否支持检查约束?
MySQL 是否支持检查约束?
我能够在 MySQL 中执行以下脚本而不会出错。
但如果我查询它不会反映:
sql - 我如何有一个引用另一个表的检查约束?
我在 SQL Server 2008 数据库中有以下表:
tblItem,它有一个ItemID字段;
tblGoodItem,它也有一个 ItemID 字段,并且有一个指向 tblItem 的外键;
tblBadItem,它也有一个 ItemID 字段,还有一个指向 tblItem 的外键。
一个项目不能既是好项目又是坏项目;它必须是一个或另一个。但是,无论物品是好是坏,它都必须是一个物品。
我的问题是:如何在 tblGoodItem 和 tblBadItem 的 ItemID 字段中添加约束,以便两个表中都不能存在 ItemID 值?
我已经阅读了 Stack Overflow 中关于类似问题的一些回复,我正在考虑这个解决方案:
创建一个视图vwItem,它在 ItemID 上连接 tblGoodItem 上的 tblBadItem。
编写一个 UDF fnItem,它对 vwItem 进行查询以查看视图中存在多少条记录。
有一个调用 fnItem 并验证返回值是否为 0 的约束。
这是最好的主意吗?有没有人有更好的主意?
sql - SQL 数据库中的约束
我需要在 T-SQL 中有一个表,它将具有以下结构
没有行,或者最多一行可以有值为 T 的 Flag 列。我的开发人员声称这可以通过放置在 table 上的检查约束来实现。
问题:
- 是否可以在数据库级别将此类约束放置在数据库本身(即行间约束)上,而不是在用于更新或插入行的业务规则中
- 这样的表格是正常形式的吗?
- 或者正常形式需要删除标志列,而是(比如说)有另一个简单的表或变量,其中包含标志=T的行的值,即在上述情况下行=3。
sql - 在删除之前检查 SQL 中的完整性约束违规
我的问题有点类似于这个
我想检查 DELETE 查询是否会因为违反约束而失败。我想在数据库级别执行此操作,因为我认为让它失败并捕获错误是丑陋的。
另一种选择是使用 SELECT 查询“手动”检查它以查看是否存在约束,但这相当乏味,恕我直言。
有没有“本地”的方式来做到这一点?
sql - 请解释 SQLServer 用于创建检查约束的语法
当我右键单击默认约束并要求 SQL Server 为其创建 CREATE 脚本时,它会生成以下代码:
作为记录,我理解第一个 ALTER 语句,但我不明白第二个 alter 语句的作用。试图用谷歌搜索“CHECK CONSTRAINT”短语,但只找到了添加约束语法。
谢谢。
赛斯
更新
感谢乔的回答。找到这个有帮助的链接。
http://blog.sqlauthority.com/2009/11/12/sql-server-disable-check-constraint-enable-check-constraint/
我不知道您可以启用和禁用约束。凉爽的!
赛斯
oracle - 在 APEX 中添加电子邮件检查约束
我对 Oracle 很陌生,对 APEX 也很陌生。我正在尝试在表上添加约束以验证电子邮件:
现在,如果我是对的,这将在 a 内正常工作,CONSTRAINT <name> CHECK(REGEXP_LIKE(...))
但是当我尝试保存它时会出现此(令人困惑的)错误:
ORA-00920: 无效的关系运算符
我认为这是因为生成的查询包含"CALLER_EMAIL"
:
有任何想法吗?
sql - 如何在 SQL Server 中的 VARCHAR 列上创建 CHECK 约束,指定最小数据长度?
我VARCHAR(30)
在 Microsoft SQL Server 数据库中有一个列。我想添加一个不允许列中的值小于 3 个字符的 CHECK 约束。我必须使用什么表达方式?