Sql server 如果输入的值为';s是另一个值的前缀

Sql server 如果输入的值为';s是另一个值的前缀,sql-server,sql-server-2008-r2,unique-constraint,Sql Server,Sql Server 2008 R2,Unique Constraint,如何防止输入的值是同一列中另一个值的前缀?例如,如果MyTable.NumberPrefix已包含abc,则无法添加ab 我的第一次尝试(如下)是使用索引视图。但是,不能在使用派生表的视图上创建唯一索引(我不知道没有它如何编写视图) 一些测试数据: insert MyTable (NumberPrefix) values ('abc') -- OK insert MyTable (NumberPrefix) values ('ab') -- Error insert MyTable (Nu

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

我的第一次尝试(如下)是使用索引视图。但是,不能在使用派生表的视图上创建唯一索引(我不知道没有它如何编写视图)

一些测试数据:

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

检查约束
用户定义函数一起使用

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)

在上面的示例中,是否要阻止添加“a”?是的,任何作为另一个值前缀的内容。“abcd”都不是其他值的前缀,为什么会出错?因为
abc
已经存在,并且是
abcd
的前缀。您不能在辅助数字表而不是派生表上进行联接吗?这起作用(阻止添加)
ab
如果
abc
存在,但如果
ab
首先存在并且您插入
abc
,则它不起作用。一个用例并不排除另一个用例。
alter table MyTable
add constraint  chkPrefix check(dbo.fnPrefix(MyColumn) = 1)