首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

2013-04-09 
插入数据时若该字段已经存在则为插入的值加个编号插入数据时若该字段已经存在则为插入的值加个编号如有个

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

如有个字段是地区,若数据库中已存在一个“重庆”,则以后插入“重庆”时,自动给该值编号后再插入数据库中 ,如:重庆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')


drop procedure MytestPro
go
create procedure MytestPro
@MyTestName varchar(30)
as
declare @SName varchar(30),@ID int,@NewName varchar(30)
set @SName = (select SName from MyTest where SName = @MyTestName)
 if(@SName is null)
  begin
  --如果名称不存在则插入数据
  insert into MyTest values(@MyTestName)
  end
 else
  begin
  --如果名称存在 获取最后一次名称记录
  set @NewName = ( select   top 1 SName FROM MyTest where SName LIKE '%A%' order by  ID desc)
  --截取名称后面的编号
  set @ID  = SUBSTRING(@NewName,2,len(@NewName))
  print convert(varchar(20),(@ID))
  set @NewName = @MyTestName+convert(varchar(20),(@ID+1))
  insert into MyTest values(@NewName)
  end

调用存储过程
 execute MytestPro  @MyTestName='A'
[解决办法]
你做一个存储过程,重庆作为存储过程的参数替换掉
c#调用这个存储过程,传实际城市名过去就行了

热点排行