日期:2014-05-17  浏览次数:20633 次

求一存储过程的写法
一个表,两个字段 一个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字段.