日期:2014-05-17  浏览次数:20887 次

插入数据时若该字段已经存在则为插入的值加个编号
插入数据时若该字段已经存在则为插入的值加个编号

如有个字段是地区,若数据库中已存在一个“重庆”,则以后插入“重庆”时,自动给该值编号后再插入数据库中 ,如:重庆1,重庆2,重庆2,重庆4,以此类推,按从小到大的顺序。

怎么实现呢?提供点思路或代码参考一下都行。谢谢了!
字符串,自动,编号,插入,数据库

------解决方案--------------------
with T as
(select count(0) As NUM from tab where name like '重庆%')
insert into tab (name) values('重庆' + case T.NUM when 0 then '' else cast(T.NUm as varchar(10)) end)

------解决方案--------------------
你这个需求的难点在于取字符串后面的数字字符,我在百度找到了这样一段代码,应该可以满足你的要求,你可以试试,时间有限,就没有提前测试代码,有问题,改改也行:
declare @string varchar(500)set @string = '宁155ML2123232'declare @len intset @len = len(@string)declare @outstr varchar(500)set @outstr = ''declare @tempstr varchar(1)while (@len>0)begin set @tempstr = substring(@string,@len,1) if (@tempstr >= '0' and @tempstr <= '9') begin  set @outstr = @tempstr + @outstr end else begin  break end set @len = @len - 1endselect @outstr

------解决方案--------------------
declare @string varchar(500)
set @string = '宁155ML2123232'
declare @len int
set @len = len(@string)
declare @outstr varchar(500)
set @outstr = ''
declare @tempstr varchar(1)
while (@len>0)
begin 
set @tempstr = substring(@string,@len,1) 
if (@tempstr >= '0' and @tempstr <= '9') 
begin  
set @outstr = @tempstr + @outstr 
end 
else 
begin  
break 
end 
set @len = @len - 1endselect 
@outstr

------解决方案--------------------
引用:
SQL code?123with T as(select count(0) As NUM from tab where name like '重庆%')insert into tab (name) values('重庆' + case T.NUM when 0 then '' else cast(T.NUm as varchar(10)) end)


有个问题,如果删除了一条“重庆n”的数据,这条sql n 的计算就错了。不能找个数,只能找最大的,避免重复
------解决方案--------------------
引用:
引用:如果数据库里有重庆1,重庆2,重庆3,重庆4,加入重庆2记录已经删除,再添加是重庆2,还是重庆5?肯定是在最大那个数的基础上递增1了!


with T as
(select isnull(max(cast(replace(name,'重庆','') as int),0)  As maxNo from tab where name like '重庆%')
insert into tab (name) values('重庆' + case T.maxNo when 0 then '' else cast((T.maxNo +1)as varchar(10)) end)

------解决方案--------------------
ID如果设置为自动增长,那么可以根据ID排序,获取最后一次添加的值。
新建测试表 MyTest 设计ID自动增长,SName varchar(30)

编写存储过程
if exists(select * from dbo.sysobjects where name='MytestPro' and type='P')