在开发过程中,要求表里某字段值唯一
一、场景
在单据,要求某字段值不重复
查看数据模型:
查看单据:
二、问题
区域编码,区域名称不重复
三、解决方案
1)数据库加索引
2)书写保存后存储过程
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE pro_massifareasave
@voucherno VARCHAR(100)--:单据类型
,@keyid VARCHAR(100)--:单据ID
,@state VARCHAR(100)--:状态[add、
AS
BEGIN
DECLARE @Error VARCHAR(1000),@Error1 VARCHAR(1000)
--select areacode FROM bs_massifarea_det GROUP BY areacode HAVING COUNT(areacode)>1
SELECT @Error =STUFF((select areacode + N',' from bs_massifarea_det GROUP BY areacode HAVING COUNT(areacode)>1 for xml path('')),1,0,N'')
SELECT @Error1 =STUFF((select areaname + N',' from bs_massifarea_det GROUP BY areaname HAVING COUNT(areaname)>1 for xml path('')),1,0,N'')
IF @Error IS NULL SET @Error=''
IF @error <>''
BEGIN
SET @Error='区域编码'+ @Error+'添加重复,请检查!'
RAISERROR(@Error,11,1)
return
END
IF @error1 <>''
BEGIN
SET @Error1='区域名称'+ @Error1+'添加重复,请检查!'
RAISERROR(@Error1,11,1)
return
end
end
GO
解释
<1>STUFF
STUFF
参数(character_expression,start,length,character_expression )
将第一个参数从start开始删除,删除长度为length,然后把第四个参数放到start的位置
<2> N
SELECT @Error =STUFF((select areacode + N',' from bs_massifarea_det GROUP BY areacode HAVING COUNT(areacode)>1 for xml path('')),1,0,N'')