gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 01:13:03 27 4
gpt4 key购买 nike

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

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

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

最佳答案

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

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)

关于sql-server - 如果一个值是另一个值的前缀,则阻止输入该值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29856977/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com