我想用一个主键。或许是拼接出来的
本来就打算用getdate()做。。
然后转换成int。但是我又想把这个int后面拼上一个自增id
这个自增id的上限1000就可以。
但是保证第二天记录的时候这个拼接的自增值又从1开始记录。。
这样的目的是为了每天看这个id就知道一天有多少条这样的记录
本来就打算用getdate()做。。
然后转换成int。但是我又想把这个int后面拼上一个自增id
这个自增id的上限1000就可以。
但是保证第二天记录的时候这个拼接的自增值又从1开始记录。。
这样的目的是为了每天看这个id就知道一天有多少条这样的记录
或用觸發器和函數處理,效率不高
http://blog.csdn.net/roy_88/article/details/1424370
兩列就行了,每次取完Update一下
日期 MaxID
--得到新编号的函数
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
--*/
但是如果是第二天的话。那个流水号我想又从000001开始呢
而且是这样的本来程序设计的是列是int自增的
所有程序那面是没有写这个字段和值的。
我不想改动很大有关程序的部分,
例如
Id name
2011101300001 a
2011101300002 a
2011101300003 a
2011101300004 a
2011101300005 a
2011101400001 a
2011101400002 a
2011101400003 a
2011101500001 a2011101500002 a
2011101500003 a
这样做,没有意义.就不说使每天自增从1开始无法实现,即使能实现,如果这一天中的记录被删除掉一些,同样无法获得这一天有多少条记录.为什么要用主键,楼主有没有掂量过?建议楼主直接用自增列作主键,如果想要知道某天有多少条记录,可以直接用
select count(*) from tb where 日期=某天
来获取,而不要用这个方法来获得一个使用麻烦,却不可靠的数据.