表结构如下面代码创建 解决方案1: 对于这个问题,大家的第一个想法可能是:在Caption这个字段上面加一个唯一键不就可以了吗?好,我们按着这个思路做下去,先创建唯一索引。 索引创建好了,我们来测试下效果 运行之后我们会收到下面的错误信息: 以下为引用的内容: 消息 ,级别 ,状态 1,第 1 行 不能在具有唯一索引 'un_test_tb' 的对象 'dbo.test_tb' 中插入重复键的行。 语句已终止。 所以该解决方案是不行的。 解决方案2: 添加约束,让SQL Server在插入数据的时候,先验证下已有数据中是否有现在要插入的这个值。由于这个约束不是简单的一个运算,因此我们先创建一个函数,然后再在约束中调用这个函数。 创建验证逻辑函数: 在约束中引用函数: 现在来测试下效果。先来测试NULL值 可以成功运行,而且也出了多行为NULL的情况。现在再来测试不为空的插入情况。 结果是在第三条语句的时候报错了,表中的Caption字段也有‘AAA'和‘BBB'了,这也正好是我们要的结果。 所以解决方案2是正确的。但是为了这么一个小小功能,就写这么长一段东西是不是太繁琐了呢?我们来看下面的解决方案。 解决方案3:(只适用于SQL Server ) SQL Server 中有了一个优雅的解决方案,那就是筛选索引。筛选索引是一种经过优化的非聚集索引,尤其适用于涵盖从定义完善的数据子集中选择数据的查询。筛选索引使用筛选谓词对表中的部分行进行索引。有了筛选索引,我们只需要写一条语句就达到上面的效果。 再用上面的一些测试语句来测试的话,会发现完全是达到了我们的要求。这个方案的唯一缺点就是该语句只有SQL Server 支持。不知道各位有没有又优雅又适用于各个版本的SQL Server的解决方案,望不胜赐教。(来源:博客园)
推荐整理分享SQL Server允许重复空字段不空字段值唯一(sqlserver允许一列列值重复),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:sql server 允许修改标识列,sqlserver允许修改表,sqlserver允许指定ip登录,sqlserver允许修改表,sql server允许用户自定义类型,sqlserver允许一列列值重复,sqlserver允许一列列值重复,sql允许重复,内容如对您有帮助,希望把文章链接给更多的朋友!
SQL Server复制功能要避开缺陷的干扰小结 SQLServer的复制分为三种,下面介绍一下这三种复制技术及其存在的一些缺陷,大家在使用时可以根据具体的情境选择适用的复制方法,避开这些缺陷的
sqlserver 手工实现差异备份的步骤 手工实现差异备份的步骤字符型:1、恢复当前库;alterdatabase当前库setRECOVERYFULL--2、建表cmd;createtablecmd(aimage)--3、备份当前库到D:cmd1;backuplog当前库todisk='D:
SQLServer 定时执行SQL语句 我不知道存储过程等能否实现,但是SQLServer的作业调度确实有这样的功能,怎样使某些SQL语句定时执行呢,依次进行下面的操作:企业管理器--管理--