字段值必须唯一,除非为 NULL

2023-11-23

我正在使用 SQL Server 2005。

我有一个必须包含唯一值或 NULL 值的字段。我认为我应该用以下任一方式强制执行此操作CHECK CONSTRAINT or a TRIGGER for INSERT, UPDATE.

与触发器相比,在这里使用约束是否有优势(反之亦然)?这样的约束/触发器是什么样的?

或者还有其他我没有考虑过的更合适的选择?


我创建一个带有索引的视图,该索引通过 where 子句忽略空值...即如果您将空值插入表中,视图不会关心,但如果您插入非空值,视图将强制执行约束。

create view dbo.UniqueAssetTag with schemabinding
as
select asset_tag
from dbo.equipment
where asset_tag is not null

GO

create unique clustered index ix_UniqueAssetTag
on UniqueAssetTag(asset_tag)

GO

所以现在我的设备表有一个 asset_tag 列,它允许多个空值,但只允许唯一的非空值。

笔记: 如果使用 mssql 2000,您需要“设置 ARITHABORT 为 ON" 就在对表执行任何插入、更新或删除之前。很确定在 mssql 2005 及更高版本上不需要这样做。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

字段值必须唯一,除非为 NULL 的相关文章

  • 插入多行并返回主键时 Sqlalchemy 的奇怪行为

    插入多行并返回主键时 我注意到一些奇怪的事情 如果我在 isert 查询中添加使用参数值 我会得到预期的行为 但是当将值传递给游标时 不会返回任何内容 这可能是一个错误还是我误解了什么 我的sqlachemy版本是0 9 4 下面如何重现错
  • 限制 SQL Server 连接到特定 IP 地址

    我想将 SQL Server 实例的连接限制为特定 IP 地址 我想阻止来自除特定列表之外的任何 IP 地址的任何连接 这是可以在 SQL Server 实例或数据库中配置的东西吗 听起来像是你会使用Windows防火墙 http tech
  • 使用 Spark DataFrame 获取组后所有组的 TopN

    我有一个 Spark SQL DataFrame user1 item1 rating1 user1 item2 rating2 user1 item3 rating3 user2 item1 rating4 如何按用户分组然后返回TopN
  • 获取家庭成员

    假设以下家庭 其构建架构是 create table PersonConn child int parent int insert into PersonConn values 1 2 insert into PersonConn valu
  • 查询中列的顺序重要吗?

    当从 MySQL 表中选择列时 与表中的顺序相比 选择列的顺序是否会影响性能 不考虑可能覆盖列的索引 例如 您有一个包含行 uid name bday 的表 并且有以下查询 SELECT uid name bday FROM table M
  • 连接两个表的查询的 SQL Server“FOR XML”输出

    我是 SQL Server 中 FOR XML 功能的新手 我正在使用 SQL Server 2012 我有两个表 Word 和 Word Expansion 样本数据 表 字 WordOID Word 1 PIPE 2 WIRE 表 Wo
  • 如何在SSRS 2012中显示基于总金额的前10名

    我只需要显示前 10 名Class基于Total SUM Premium 柱子 我转到类代码属性组 gt 过滤器并按 SUM Net Written Premium 设置前 10 名 但它不起作用 我只需要显示前 10 名 而且总金额也应该
  • 复选框上的数据绑定

    我目前正在将数据从 SQL 数据库之一提取到我的应用程序中 我可以让它适用于我的文本框和其他项目 但是 我似乎无法让它适用于复选框 这是我正在使用的代码 DataTable dt new DataTable dt using SqlConn
  • 如何在 SQL Server 中使用 nvarchar 变量为 unicode 用户添加前缀“N”?

    如何在 SQL Server 中使用 nvarchar 变量为 unicode 用户添加前缀 N 例如 给定这个变量 declare Query1 nvarchar max 我可以这样分配它 set Query1 N 但是如果我想使用怎么办
  • 为什么这会返回资源 id #2? [复制]

    这个问题在这里已经有答案了 可能的重复 我如何从 PHP 中的 MySql 响应中 回显 资源 id 6 https stackoverflow com questions 4290108 how do i echo a resource
  • SQL Server,插入 Excel“链接服务器”时出现“无效列名”错误

    我有一个简单的 Excel 电子表格文档 运行 Office 2013 我使用 Microsoft Office 15 0 Access 数据库引擎 OLE DB 提供程序 将其用作数据库 我可以使用 MS SQL Server Manag
  • 在 SQL Server 中处理日期

    我正在开发一个 ASP NET 网站 我从网页获取日期 然后根据用户输入我想从 SQL Server 数据库获取结果 使用存储过程 问题是我只能从用户界面获取这种格式的日期2016 10 08这是字符串类型 但在数据库中 我有一个类型为da
  • 如何在使用连接池时强制 SqlConnection 物理关闭?

    我明白 如果我实例化一个 SqlConnection 对象 我实际上是从连接池中获取一个连接 当我调用 Open 时 它将打开连接 如果我对该 SqlConnection 对象调用 Close 或 Dispose 方法 它将返回到连接池 但
  • 分层查询

    我希望我能够解释困扰我的问题 我有以下分层数据集 这只是 34K 记录的子集 PARENT ID CHILD ID EXAM TUDA12802 TUDA12982 N TUDA12982 TUDA12984 J TUDA12984 TUD
  • 使用 JSON 参数的 Postgres 批量 INSERT 函数

    这是一个plpgsqlpostgres 的函数9 6 它试图INSERT一行 如果插入没有失败 由于违反键约束 那么它会运行更多命令 CREATE FUNCTION foo int text text RETURNS void AS BEG
  • 避免连接失败时出现空指针

    我有我的域类 带有命名查询 class Atendimento implements Serializable Funcionario funcionario static mapping funcionario column FUNCOD
  • 了解 SSMS 2008 中关系的更新和删除规则

    当我们定义外键约束时 我对 SQL Server 2008 Management Studio 中的更新和删除规则的含义感到困惑 我也没有找到相关的帮助文档 例如F1帮助 这是屏幕快照 如果有人能描述它们的含义并推荐一些相关文档来阅读 我将
  • 使用 where 进行 select 语句时,HSQLDB 用户缺乏权限或未找到对象错误

    我的数据库使用 SQuirrel SQL 客户端版本 3 5 3 和 HSQLDB 我已经能够为其指定相应的驱动程序 内存中 并创建一个别名 我创建了一个表 CREATE TABLE ENTRY NAME VARCHAR 100 NOT N
  • 在 SQL 数据库中存储“列表”的最正确方法是什么?

    因此 我读了很多关于如何将多个值存储到一个列中是一个坏主意 并且违反了数据标准化的第一条规则 令人惊讶的是 这不是 不要谈论数据标准化 所以我需要一些帮助 目前我正在为我工 作的地方设计一个 ASP NET 网页 我想根据此人所属的 Act
  • MySQL 按重复项从上到下排序

    我有一个lammer问题 因为我不是mysql专业人士 我有类似的字段 id color 1 red 2 green 3 yellow 4 green 5 green 6 red 我想按重复项进行分组 最常见的重复项先进行分组 所以应该这样

随机推荐

  • 在C#中使用FtpWebRequest时设置端口号

    当我尝试使用 VS2008 作为调试器从 C 代码 FTP 到我的 Win 2008 服务器时 我不断收到异常 我的测试类如下所示 public class FTP private string ftpServerIP 192 168 10
  • 比较 BigDecimal

    我有以下两个 BigDecimal 对象 BigDecimal one new BigDecimal 3 0 BigDecimal two new BigDecimal 3 00 System out println one scale 0
  • 三角测量和直接线性变换

    按照 Hartley Zisserman 的多视图几何算法 12 最佳三角测量方法 p318 我得到了相应的图像点 xhat1 和 xhat2 步骤 10 在步骤11中 需要计算3D点Xhat 其中一种方法是直接线性变换 DLT 在 12
  • 如何从Java中的日期获取世纪

    如何从Java中的日期获取当前世纪 例如日期 06 03 2011 根据格式 MM dd yyyy 我怎样才能从这个日期使用当前世纪SimpleDateFormat 哈利 莱姆发布的内容略有变化 他的逻辑并不完全正确 1901 年是 20
  • 为什么要包括警卫?

    包括定义的警卫here 用于防止在编译时两次加载相同的代码 为什么我的编译器 GCC 无法检测到它正在加载相同的代码两次并具有合理的默认行为 仅仅是因为您可能希望编译器加载该文件两次 请记住 那个 include只需加载一个文件并将其内容放
  • 我可以优化 Mercurial 克隆吗?

    我的 Mercurial 克隆变得非常慢 可能是由于磁盘碎片所致 有没有办法优化它 最明显的方法是创建一个新克隆 然后将我的 MQ 保存的捆绑包 hgrc 等复制到新克隆并删除旧克隆 但似乎有人以前遇到过这个问题并进行了扩展来做到这一点 如
  • 如何使用 std::rel_ops 自动提供比较运算符? [复制]

    这个问题在这里已经有答案了 如何获得运营商 gt gt lt and from and
  • 如何在 Python 中检测文件是否为二进制(非文本)?

    在 Python 中如何判断文件是否是二进制 非文本 我正在 Python 中搜索大量文件 并不断在二进制文件中获取匹配项 这使得输出看起来非常混乱 我知道我可以使用grep I 但我对数据的处理超出了 grep 允许的范围 过去 我只会搜
  • “此链接已停用,因为它未嵌入 JSF 表单中。”

    当我使用以下命令链接时
  • 比较悬空指针合法吗?

    比较悬空指针合法吗 int p q int a p a int b q b std cout lt lt p q lt lt n 注意两者如何p and q指向已经消失的物体 这合法吗 介绍 第一个问题是使用价值是否合法p at all A
  • 如何在 Java 中合并两个 XML

    我正在尝试用 Java 合并两个 xml 我正在使用 STaX API 来编写这些 XML 我在互联网上搜索了很多关于如何合并 xml 的信息 但没有一个看起来像C 有没有使用 StAX 在 Java 中执行此操作的直接方法 xslt 可能
  • 您如何组织版本控制存储库?

    首先 我知道这一点 您将如何为内部软件项目组织 Subversion 存储库 接下来 实际问题 我的团队正在重组我们的存储库 我正在寻找有关如何组织它的提示 在本例中为 SVN 这就是我们的想法 我们有一个存储库 多个项目和多个 svn e
  • 如何表示数据库中的继承? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我正在考虑如何在 SQL Server 数据库中表示复杂的结构 考虑一个需要存储一系列对象的详细信息的应用程序 这些对象共享一些属性 但有许多其他不常见的属性 例如 商业保险套餐可能在同一
  • SQL Server 字段被截断

    好的 我正在使用 SQL Server 2008 并且有一个类型的表字段VARCHAR MAX 问题是 当使用保存信息时Hibernate 内容VARCHAR MAX 字段被截断 我在应用程序服务器或数据库服务器上没有看到任何错误消息 该字
  • 访问 R 中列表列表的同名列表元素

    我经常遇到需要为不同变量创建许多相似模型的情况 通常我将它们转储到列表中 这是虚拟代码的示例 modlist lt lapply 1 10 function l data lt data frame Y rnorm 10 X rnorm 1
  • DataAnnotations 的 FileExtensions 属性在 MVC 中不起作用

    我正在尝试使用 MVC 中的 HTML FileUpload 控件上传文件 我想验证文件只接受特定的扩展名 我尝试过使用 DataAnnotations 命名空间的 FileExtensions 属性 但它不起作用 请参阅下面的代码 pub
  • openCSV 没有读取我的整个文件

    我有一个 Java 应用程序 我正在使用 openCSV 来读取文件 非常大 然后 我将第四列 如果有影响的话 最终会添加一列或两列 放入 HashSet 中 并将其输出到一个新文件中 这一切似乎工作正常 但我发现它只读取文件的一部分 27
  • 如何使用唯一复合键

    我有一张桌子 Item ItemName ItemSize Price Notes 我正在制作 ItemName ItemSize 的复合键来唯一标识项目 现在 在阅读了 stackoverflow 上建议使用 UNIQUE 的一些答案后
  • 我什么时候会选择 AesCryptoServiceProvider 而不是 AesManaged 或 RijndaelManaged?

    我认为区别因素是 AesCryptoServiceProvider 符合 FIPS 标准 AesManaged 是跨平台的 需要 NET 3 0 RijndaelManaged 在 NET 2 0 上运行 需要限制块大小 是这样吗 Aes托
  • 字段值必须唯一,除非为 NULL

    我正在使用 SQL Server 2005 我有一个必须包含唯一值或 NULL 值的字段 我认为我应该用以下任一方式强制执行此操作CHECK CONSTRAINT or a TRIGGER for INSERT UPDATE 与触发器相比