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

怎么使SQL中的字符串字段实现自增 该字段设为主键
怎么使SQL中的字符串字段实现自增 该字段设为主键 比如
01
02
03
。。。
99

------解决方案--------------------
先以1,2,3自增,
select 的时候转换

select right('00'+'1',2)
------解决方案--------------------
既然做起来很麻烦,就要回过头想想这个要求的合理性和必要性
------解决方案--------------------
参考:
http://www.cnblogs.com/insus/archive/2011/08/21/2147645.html
------解决方案--------------------
SQL code
--下面的代码生成长度为8的编号,编号以BH开头,其余6位为流水号。
--得到新编号的函数
CREATE FUNCTION f_NextBH()
RETURNS char(8)
AS
BEGIN
    RETURN(SELECT 'BH'+RIGHT(1000001+ISNULL(RIGHT(MAX(BH),6),0),6) FROM tb WITH(XLOCK,PAGLOCK))
END
GO

--在表中应用函数
CREATE TABLE tb(
BH char(8) PRIMARY KEY DEFAULT dbo.f_NextBH(),
col int)

--插入资料
BEGIN TRAN
    INSERT tb(col) VALUES(1)
    INSERT tb(col) VALUES(2)
    INSERT tb(col) VALUES(3)
    DELETE tb WHERE col=3
    INSERT tb(col) VALUES(4)
    INSERT tb(BH,col) VALUES(dbo.f_NextBH(),14)
COMMIT TRAN

--显示结果
SELECT * FROM tb
/*--结果
BH         col 
---------------- ----------- 
BH000001  1
BH000002  2
BH000003  4
BH000004  14
--*/

------解决方案--------------------
SQL code
参考:
Id, FormatId, F1 ,F2
Id序号我设了自动加一,FormatId我想他也象这样"SL000001",
当Insert时就加1,FormatId我想他也能自动加一"SL000001","SL000002"...
能用一条sql什么办法实现.最好不要用中间表。有什么好方法?
谢谢!


create table #test
(id int identity,
FormatId as 'SL'+right(10000000+id,6),
F1 varchar(50))
go
insert #test(F1) select '1'
union all select '2'


select * from #test

drop table #test


/*
id          FormatId       F1   
----------- -------------- -----
1           SL000001       1
2           SL000002       2

(所影响的行数为 2 行)
*/

------解决方案--------------------
探讨
先以1,2,3自增,
select 的时候转换

select right('00'+'1',2)

------解决方案--------------------
这要看lz需要多少位了,一般就用right函数进行补0