首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

<<<<<<高并发查找序号有关问题,高手来帮忙!>>>>>>>

2012-02-11 
高并发查找序号问题,高手来帮忙!!!有人做过并发量比较高的大系统吗?CREATEFUNCTIONf_NextNbr

<<<<<<高并发查找序号问题,高手来帮忙!!!>>>>>>>
有人做过并发量比较高的大系统吗?  
CREATE   FUNCTION   f_NextNbr()
RETURNS   char(8)
AS
BEGIN
RETURN(
SELECT   MAX(序号)
FROM   预算表   WITH   (XLOCK,   PAGLOCK)
)
END
GO  
我用上述存储过程找最大序号~~~数据量并发量上去后有没有影响?会不会死锁概率提高呢?
关键对(XLOCK,   PAGLOCK)这个有点怀疑~~~~~是不是必须有索引之类的配合
我的预算表主键是Guid,序号是其中一列。

[解决办法]


CREATE PROCEDURE GETMAXKEYNO
--Declare
@TableName varchar(20), /* 要取号的表名 */
@DESCRIPT varchar (50), /* 参数说明 */
@VTYPE VARCHAR (2), /* 参数类型 */
@RESULTSTR varchar(20) OutPut, /*返回的编号*/
@ATT_DEPT_ID VARCHAR (12)
AS
BEGIN
Declare @No varchar(20),@TempValue integer
--> > > > > > > > > >

Select @No = PARAM_VALUE From SYS_PARAMS
Where CATEGORY = @TableName and PARAM_NAME = 'KEY_NO ' AND ATT_DEPT_ID=@ATT_DEPT_ID

If @No Is NULL
begin
delete From SYS_PARAMS
Where CATEGORY = @TableName and PARAM_NAME = 'KEY_NO '
AND ATT_DEPT_ID=@ATT_DEPT_ID
Insert Into SYS_PARAMS(CATEGORY,PARAM_NAME,PARAM_VALUE,ATT_DEPT_ID)
Values(@TableName, 'KEY_NO ', '0 ',@ATT_DEPT_ID)
end

Select @TempValue = CONVERT(INT,ISNULL(@NO,0))+1
Select @NO = CONVERT(VARCHAR,@TEMPVALUE)

Update SYS_PARAMS Set PARAM_VALUE = @NO
Where CATEGORY = @TableName and PARAM_NAME= 'KEY_NO ' AND ATT_DEPT_ID=@ATT_DEPT_ID

--> > > > > > > > > > > > > > > > > > > >
UPDATE SYS_PARAMS SET DESCRIPT=@DESCRIPT,
VTYPE =@VTYPE
Where CATEGORY = @TableName and PARAM_NAME = 'KEY_NO '
AND ATT_DEPT_ID=@ATT_DEPT_ID

--> > > > > > > > >

SELECT @RESULTSTR = @NO
END

GO
[解决办法]
SELECT MAX(序号)
FROM 预算表 WITH (XLOCK, PAGLOCK)
-----------------------------------------

既然是高并发,建议改为WITH (ULOCK,ROWLOCK).
[解决办法]
还要一个READPAST.
[解决办法]
SELECT MAX(序号) FROM 预算表

它并发不并发有什么关系呢? 还不是找出一样的值.

并发影响,在要修改删除上做文章.


[解决办法]
我觉得专门建立一个存储最大编码的表,这样就不用检索了,
每次保存的时候就更新一下就可以了

热点排行
Bad Request.