日期:2014-05-18  浏览次数:20604 次

关于唯一约束
正常的unique 索引可以保证列中不插入重复值,我想实现一个功能,就是一个列中的部分字段不能重复。该如何实现。

比如列中会以随机的4个字母开头,后面接一段数字,ABCD12345678,如果我想在这个列中插入一个新值,需保证插入的值从第五位数字开始到结尾,与原表中的任意字段的第五位数字开始到结尾不重复。
原表中有ABCD12345678,则不允许插入****12345678,*代表任意字母。在SQL SERVER中要怎么实现?



------解决方案--------------------
用约束应该实现不了,可以考虑用触发器
------解决方案--------------------
数据库设计的不合理。
------解决方案--------------------
实现起来没有意义,与任意字符的内容不能重复,意味着要比较整个表的全部字段的内容,效率必定低下,没有意义啊.

=========================================================================================

欢迎访问我的博客
------解决方案--------------------
数据量大的时候效率低,浪费资源,可以考虑用程序实现嘛,干嘛非要搞成约束?
------解决方案--------------------
这样的功能约束定是实现不了,最好用触发器了。
------解决方案--------------------
果断触发器
------解决方案--------------------
写给用触发器用来判断插入的数据是否合理。
------解决方案--------------------
触发器
------解决方案--------------------
有个办法,不过很浪费。
设置2个字段,字段1为真正想要的值,字段2为字段1从第5位开始到最后的值,该字段设置UNIQUE约束。
然后在定义表的时候如下:
SQL code

create table t1
(
    id int not null identity(1,1),
    id1 varchar(5) unique,
    id2 as left(NEWID(),4)+id1
)
insert into t1 (id1) values ('abcde')    

select * from t1