如果值是另一个值的前缀,则阻止输入值

时间:2015-04-24 20:34:02

标签: sql-server sql-server-2008-r2 unique-constraint

如何防止输入的值是同一列中另一个值的前缀?例如,如果MyTable.NumberPrefix已包含abc,则无法添加ab

我的第一次尝试(下面)是使用索引视图。但是无法在使用派生表的视图上创建唯一索引(我无法弄清楚如何在没有它的情况下编写视图)。

create view MyTable
with schemabinding
as
select
  left(a.NumberPrefix, b.Length) as CommonPrefix
from 
  dbo.MyTable a
  cross join
  (
    select distinct
      len(NumberPrefix) as Length
    from
      dbo.MyTable
  ) b

create unique clustered index MyIndex on MyTable (CommonPrefix) --ERROR

一些测试数据:

insert MyTable (NumberPrefix) values ('abc')  -- OK
insert MyTable (NumberPrefix) values ('ab')   -- Error
insert MyTable (NumberPrefix) values ('a')    -- Error
insert MyTable (NumberPrefix) values ('abd')  -- OK
insert MyTable (NumberPrefix) values ('abcd') -- Error

1 个答案:

答案 0 :(得分:1)

check constraintuser defined function

一起使用
create function fnPrefix(@prefix varchar(100))
returns bit
as
begin
    if (select count(*) from MyTable 
        where MyColumn like @prefix + '%' or @prefix like MyColumn + '%') > 1
        return 0

    return 1
end

然后添加约束:

alter table MyTable
add constraint  chkPrefix check(dbo.fnPrefix(MyColumn) = 1)