在开发过程中,要求表里某字段值唯一
一、场景
在单据,要求某字段值不重复
 查看数据模型:
 
 查看单据:
 
二、问题
区域编码,区域名称不重复
三、解决方案
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'')
 




















