关于唯一约束
正常的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