• 技术文章 >数据库 >mysql教程

    SQL Server允许重复空字段不空值解决方法(1/2)

    2016-06-07 17:48:01原创677

    解决方案1:
    对于这个问题,大家的第一个想法可能是:在caption这个字段上面加一个唯一键不就可以了吗?好,我们按着这个思路做下去,先创建唯一索引。
    代码如下:
    create unique nonclustered index un_test_tb
    on test_tb(caption)
    go

    索引创建好了,我们来测试下效果
    代码如下:
    insert into test_tb (caption)
    values (null)
    go
    insert into test_tb (caption)
    values (null)
    go

    运行之后我们会收到下面的错误信息:
    以下为引用的内容:
    消息 2601,级别 14,状态 1,第 1 行
    不能在具有唯一索引 'un_test_tb' 的对象 'dbo.test_tb' 中插入重复键的行。
    语句已终止。
    所以该解决方案是不行的。
    解决方案2:
    添加约束,让sql server在插入数据的时候,先验证下已有数据中是否有现在要插入的这个值。由于这个约束不是简单的一个运算,因此我们先创建一个函数,然后再在约束中调用这个函数。
    创建验证逻辑函数:
    代码如下:
    create function [dbo].[fn_ck_test_tb_caption]()
    returns bit
    as
    begin
    if(exists(
    select 1
    from test_tb as a
    where (caption is not null) and exists
    (select 1 as expr1
    from test_tb
    where (caption is not null) and (caption = a.caption) and (a.testid <> testid))
    ))
    return 0
    return 1
    end
    go

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:caption test tb null nbsp
    上一篇:sql GROUP BY用法 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • hive和mysql的区别有哪些• mysql数据库的超级管理员名称是什么• mysql怎么连接数据库• count(*)为什么很慢?原因分析• mysql事务隔离级别有哪些
    1/1

    PHP中文网