求一存储过程的写法
一个表,两个字段 一个XH   varchar  一个SJ  datetime
客户端insert SJ,不理会XH,存储过程返回XH,XH由SJ次序排序号码。(就是客户端只提交时间,存储过程告诉客户端你提交的时间应该排第几号)
多客户端同时提交怎么保证XH准确啊
求指教
希望我讲明白了
              
------解决方案-------------------- INSERT INTO #Test 
OUTPUT inserted.ID 
		,inserted.Num 
INTO #TT 
SELECT * FROM table1 不知道这个可以不
------解决方案-------------------- 不太明白,LZ可否举例说明一下?
------解决方案-------------------- 你的意思是不是在存储过程中用SJ做参数 查询出XH?
------解决方案-------------------- 不知道你序号的编码规则是什么,我以A00001
 
create table tab (xh varchar(10),sj datetime) 
 
create proc pr_test (@sj datetime,@xh varchar(6) output) 
as begin 
declare @max_xh varchar(6) 
if not exists(select 1 from tab) 
set @max_xh='A00001' 
else  
begin 
select @max_xh=max(xh)  from tab 
set @max_xh='A'+right('000000'+cast(cast(right(@max_xh,5) as int)+1 as varchar),5) 
end 
insert into tab(xh,sj) 
values(@max_xh,@sj) 
select @xh=@max_xh 
end 
 
declare @xh varchar(10) 
exec pr_test '20130924',@xh output 
select @xh 
------解决方案-------------------- 我觉得你的表设计有缺陷,这里只有排除时间,没有一个状态去标识.通常情况下你获取一个排队号后,除了知道自己的流水号,还知道排在前面的有几个人.
如果加一个状态标识,前面已经完成挂号的就不列入排队名额中.这样由时间大小可以知道前面还有多少人.
------解决方案-------------------- 引用: Quote: 引用:  
你的意思是不是在存储过程中用SJ做参数 查询出XH? 
也可以这么说吧 
打个比喻 医院的网上挂号 
不同患者在不同的客户端挂号(B/S系统) 
怎么计算每个患者的序号(按时间排序)并反馈给页面 
本人SQL很烂 下面是本人的思路 
患者提交时,执行存储过程,开始事务, 会插入(insert)患者的身份信息等资料,其中最主要的是当前时间,可是插入时并不知道自己的序号,所以插完之后再SELECT当前天有多少行(row),这个行数应该就是这个患者的序号,然后再updata更新序号,并output参数。提交事务。 
一个客户端单次提交,很正常。往复多次序号也正常。于是想用一个循环来模拟并发(for  执行N次),可结果不争取。 
从结果上来看,有点象程序中多线程访问共享未加锁的效果,好像事务中的insert select updata被多线程执行并没有保护好的样子 
正常的序号应该 1、2、3、4、5、6、7、8 
可我的节骨有时是1、3、3、8、8、8、8、8 
 
你的设计是有问题的,请搜索关键字SCOPE_IDENTITY()
------解决方案-------------------- 用identity列即可.
每次insert后output返回刚才的identity值就是序号,然后根据identity值更新XH字段.