sql中如何让char类型的字段自动增长呢?比如123.....每次增长加1

a2325145 2012-05-30 11:04:26
sql中如何让char类型的字段自动增长呢?比如123.....每次增长加1,写出具体的方法谢谢哈
...全文
395 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
char类型没有自动增长,要么就是自己写函数
a2325145 2012-05-30
  • 打赏
  • 举报
回复
再说一下需求,要求 用char数据作为主键,然后自动增长,要求是序号自动增长 比如1,2,3,4,5
a2325145 2012-05-30
  • 打赏
  • 举报
回复
好像我的要求比较简单啦 就是char类型的做主键然后自动增长。。。。。
孤独加百列 2012-05-30
  • 打赏
  • 举报
回复

IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'tba')
BEGIN
DROP TABLE tba
END
GO
CREATE TABLE tba
(
ID INT IDENTITY(1,1),
code AS CAST(ID AS VARCHAR(100)),
Memo VARCHAR(100)
)

GO
INSERT INTO tba
SELECT 'haha' UNION
SELECT 'hoho'

SELECT * FROM tba

ID code Memo
1 1 haha
2 2 hoho
Mr_Nice 2012-05-30
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
sql中如何让char类型的字段自动增长呢?比如123.....每次增长加1,写出具体的方法谢谢哈
[/Quote]

CREATE TABLE TA(id int IDENTITY(1,1),cc INT,col AS CONVERT(CHAR,id))  
--添加一个identity的列,当前列col设为计算列即可。
GO


INSERT INTO ta(cc)
SELECT number
FROM master..spt_values
WHERE type ='P'
AND number <10


SELECT * FROM dbo.ta

/*
id cc col
----------- ----------- ------------------------------
1 0 1
2 1 2
3 2 3
4 3 4
5 4 5
6 5 6
7 6 7
8 7 8
9 8 9
10 9 10

(10 row(s) affected)
我腫了 2012-05-30
  • 打赏
  • 举报
回复


DECLARE @tb TABLE(ID INT IDENTITY(1,1),Code NVARCHAR(50),Val AS Code+LTRIM(ID))


INSERT INTO @tb VALUES(N'IT')
INSERT INTO @tb VALUES(N'IT')
INSERT INTO @tb VALUES(N'IT')
INSERT INTO @tb VALUES(N'IT')
INSERT INTO @tb VALUES(N'IT')
INSERT INTO @tb VALUES(N'IT')
INSERT INTO @tb VALUES(N'IT')

SELECT * FROM @tb
  • 打赏
  • 举报
回复

/*
功能:利用函数创建流水号如:
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
  • 打赏
  • 举报
回复

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 生成流水号,参考

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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