求一个SQL或算法语句.

ycg_893 2007-09-21 12:00:52
要求:似类单据号的规则,在数据库中有一个字段BillCode,类型与宽度varchar(50).单据号保存在这个字段中.
用户在新增单据时,如上一张是20070922001,再新增时为变为20070922002,但上张是20070922A时,再新增时20070922B,只要字母和数字
...全文
109 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
nextsun 2007-09-21
  • 打赏
  • 举报
回复
我刚才做了下,根据最后一个添加的编号得到新的编号,不知道是不是你这样的需求:
下面是在查询分析器里写,你根据你自己的需求再写成存储过程吧

declare @nbillcode varchar(50)--单据号
declare @endcode char(3)--最后3位
declare @lastcode char--最后1位
declare @ac int--最后1位的ascii码

set @nbillcode=(select top 1 BillCode from BillTest order by BillCode Desc)
set @lastcode=cast(substring(@nbillcode,11,1) as char)
set @ac=ascii(@lastcode)

if(@ac<=57 and @ac>=47)--如果最后一位为数字
begin
set @endcode=right('000'+cast(substring(@nbillcode,9,3)+1 as varchar(3)),3)
end
else--如果最后一位为字母
begin
set @endcode=right('000'+char(@ac+1),3)
end

set @nbillcode=substring(@nbillcode,0,9)+@endcode

select @nbillcode as billcode
felix3118 2007-09-21
  • 打赏
  • 举报
回复
20070922001,再新增时为变为20070922002会做,那a---b没做过,在程序里好实现吧,用asii码加1。
zxkid 2007-09-21
  • 打赏
  • 举报
回复
手误, 应是INSTEAD OF触发器
zxkid 2007-09-21
  • 打赏
  • 举报
回复
可以通过AFTER触发器或存储过程来实现

110,529

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧