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

sql server 流水号的问题
最近做一个问卷调查,要把调查对象的回答输入数据库中,想弄个调查对象的流水号.上网一看头都大了,找到了下面这句话:
"可以把流水号保存到一个单独的表中,在真正追加数据时才更新最大流水号+1 "
这样怎么实现呢?

我的库是这样建的
调查对象流水号     主键
题号     主键
答案    
备注


------解决方案--------------------
identity列
------解决方案--------------------
自动增长得了
------解决方案--------------------
CREATE PROCEDURE [dbo].[SSNGeneratorInstre]
@SSNType varchar(100),@CurrentValue int OUTPUT
AS
update SSNGenerator set CurrentValue = CurrentValue+1 where SSNType = @SSNType

select @CurrentValue=CurrentValue from SSNGenerator where SSNType = @SSNType

------解决方案--------------------
用计算列来实现呢?
------解决方案--------------------
新增一个表 流水号表(流水号 INT) 初始值为200700100001

然后新增加一个人的问卷结果的时候,就先 select max(流水号) from 流水号表

然后新的这个人的流水号等于 查询出的流水号 + 1

存储过程写法如下:
DECLARE @FID INT
SELECT @FID = MAX(流水号) from 流水号表
SET @FID = @FID + 1

INSERT INTO 结果表
SELECT @FID ,题目.....
------解决方案--------------------
可以在程序端解决这个问题,写一个静态方法,TOP1上一个订单号,然后把字符串转换一下,再++,获得新的订单号
------解决方案--------------------
可以把流水号保存到一个单独的表中,在真正追加数据时才更新最大流水号+1
------------------------------------------
还是比较容易实现的,需要注意
1、Transaction 的commit
2、如果数据量比较大,需要定义多个表来保存序列号,否则会造成数据表的频繁访问大致性能下降

你需要我给写一个