日期:2014-05-18  浏览次数:21254 次

sql中如何让char类型的字段自动增长呢?比如123.....每次增长加1
sql中如何让char类型的字段自动增长呢?比如123.....每次增长加1,写出具体的方法谢谢哈

------解决方案--------------------
SQL code

DROP PROCEDURE PRO_AutoLSH
 2  GO
 3  CREATE PROCEDURE PRO_AutoLSH
 4 (    
 5  @letter varchar(10),    --首字母,可以多个字母    
 6 @LSHkey varchar(20),    --表中的流水号列名,最好是主键    
 7 @tablename varchar(20)     --表名
 8 )
 9 AS
10 begin 
11     DECLARE @LSHID  NVARCHAR(20)    
12     DECLARE @TLSH   VARCHAR(20)    
13     DECLARE @NUM    INT    
14     DECLARE @sql    NVARCHAR(200) 
15     ----查询该表最大的流水号    
16     SET @sql='SELECT ISNULL(MAX(CONVERT(INT,SUBSTRING('+@LSHkey+',8,4))),0)+1 FROM '+@tablename    
17     --创建临时表    
18     CREATE TABLE TEMP1(TOTAL INT);    
19     --写入查询得到的数据    
20     INSERT INTO TEMP1 EXEC(@sql);    
21     --再查询出值    
22     SET @NUM=(SELECT TOTAL FROM TEMP1)    
23     DROP TABLE TEMP1        
24     --拼接下一个流水号:J+年份4位+月份2位+4位编号(如J2010120001)    
25     SET @TLSH=@letter+SUBSTRING(CONVERT(VARCHAR(100),GETDATE(),112),1,6)+SUBSTRING(CONVERT(CHAR(5),10000+@NUM),2,4)    
26     SET @sql=''        
27     SET @sql='SELECT @LSH='+''''+@TLSH+''''+' FROM '+@tablename 
28        
29     EXEC sp_executesql @sql,N'@LSH NVARCHAR(20) OUTPUT',@LSHID OUTPUT SELECT @LSHID
30 end

--SQL 生成流水号,参考

------解决方案--------------------
SQL code

/*
  功能:利用函数创建流水号如:
        fx201005260001,
        fx201005260002,
        fx201005270001
  作者:陈永建
  创建时间:2010-05-26
  
*/
use master
go
if(db_id('NumberDB')is not null)
drop database NumberDB
go
create database NumberDB
GO
USE NumberDB
go
if(object_id('number')is not null)
drop table number
go
create table number
(
 id varchar(50) not null,
 CreateDate datetime not null
)
go

select * from number
--创建函数生成流水号
if(object_id('fun_CreateNum')is not null)
drop function fun_CreateNum
go
--@profix 前缀
--@dateFormat 日期格式如20050512 :获取当天的日期
--@length 长度:根据你的实际需求来填写你的长度(交易量少则长度短些)
create function fun_CreateNum(@profix varchar(10),@dateFormat varchar(20),@length int)
returns varchar(100)
as
begin
  declare @MyNo varchar(100)
  select @MyNo= max(id) from number where datediff (dd,CreateDate,getdate())=0 --得到当天最大流水号
  --isnull(目标参数,设置的值):如果目标参数为空则变为设定值
  set @MyNo=convert(int,isnull(right(@MyNo,@length),0))+1 --如果今天有记录,则在最大的流水号上加1
  --replicate(设定值,重复次数): 将设定值重复
  set @MyNo=right(replicate(0,@length)+@MyNo,@length)--将@MyNo前加0后截取相应的位数
  set @MyNo=@profix+@dateFormat+@MyNo--拼接成流水号
  return @MyNo
end
go

--调用函数
--convert(varchar(20),getdate(),112):112将日期格式设置为如:20050512格式
select dbo.fun_CreateNum('fx',convert(varchar(20),getdate(),112),5)
--将流水号插入数据表中
insert into number values(dbo.fun_CreateNum('fx',convert(varchar(20),getdate(),112),5),getdate())
go
select * from number