下面的语句在我们系统中出现并发性比较高,请大侠能否帮忙看一下!

jack15850798154 2014-04-14 10:35:46

-- =============================================
-- Author:
-- Create date: 2010.01.29
-- Description: Generate Table Seque
-- =============================================
ALTER PROCEDURE [dbo].[GetNextPrimaryKeyID]
-- Add the parameters for the stored procedure here
@tableName varchar(40) ,
@FieldName varchar(40)
AS
DECLARE @Next_Value int
DECLARE @SQL nvarchar(4000)
Declare @NextPrimaryKeyID int
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
BEGIN TRAN;
lable:
SELECT @NextPrimaryKeyID = NEXT_VALUE
FROM PRIMARY_KEY_SEQ
WHERE UPPER(TABLE_NAME) = UPPER(@tableName) AND
UPPER(PK_NAME) = UPPER(@FieldName);

UPDATE PRIMARY_KEY_SEQ
SET NEXT_VALUE = NEXT_VALUE + 1
WHERE UPPER(TABLE_NAME) = UPPER(@tableName) AND
UPPER(PK_NAME) = UPPER(@FieldName);
IF @@ROWCOUNT = 0
BEGIN
INSERT INTO PRIMARY_KEY_SEQ(TABLE_NAME,PK_NAME,NEXT_VALUE)
VALUES(UPPER(@tableName),UPPER(@FieldName),1);
GOTO lable
END
COMMIT TRAN;
RETURN (@NextPrimaryKeyID);
END
...全文
125 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yoan2014 2014-04-14
  • 打赏
  • 举报
回复
where条件中的upper可以改用前端保证数据为大写?
xdashewan 2014-04-14
  • 打赏
  • 举报
回复
你问题没问清楚,是在高并发的情况下出现了相同数字,还是说想改成不要并发,或者说是效率出现问题?
--小F-- 2014-04-14
  • 打赏
  • 举报
回复
索引都利用不到的。你的列这些不要有函数和计算。
水族杰纶 2014-04-14
  • 打赏
  • 举报
回复
UPPER(TABLE_NAME) = UPPER(@tableName) AND UPPER(PK_NAME) 把左边的upper都去掉
haitao 2014-04-14
  • 打赏
  • 举报
回复
试一试 改用 update ... output ... 是不是高效一点

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧