存储过程使用临时表超时主键提示已存在

qb81195235 2017-03-16 03:28:32
Create PROCEDURE [dbo].[sp_Test]
@aa int,
@rtn int output
AS
BEGIN
if exists(select * from tempdb..sysobjects where id=object_id('tempdb..#TT'))
DROP TABLE #TT
CREATE TABLE #TT
(
Id INT IDENTITY(1,1),
[Mid] int,
CONSTRAINT [PK_#TT] PRIMARY KEY CLUSTERED
(
Id ASC
)
) ON [PRIMARY]
insert into #TT([Mid]) values (@aa)
set @rtn =(select id from tempdb..sysobjects where id=object_id('tempdb..#TT'))
if(@aa =1)--传入参数1延迟30秒
begin
WAITFOR DELAY '00:00:30';
end
DROP TABLE #TT
END
问题:
操作1:传入参数aa=1;同时操作2:传入参数aa=2;在操作1执行完之前,操作2都会提示‘PK_#TT’已存在,无主键则操作1不会影响操作2.
疑问:当调用本存储过程超时,那么在该时间内,所有其它调用本存储过程的请求都会失败,提示主键‘PK_#TT’已存在。

如何处理?1.不使用主键;2.保证不超时(办不到)?
...全文
181 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qb81195235 2017-03-16
  • 打赏
  • 举报
回复
谢谢,搞定结帖。
qb81195235 2017-03-16
  • 打赏
  • 举报
回复
看错了,是不自定义主键名称?
qb81195235 2017-03-16
  • 打赏
  • 举报
回复
使用临时表的时候比如inner join,用主键做连接速度快很多。 难道在临时表中就不能使用主键??
Tiger_Zhao 2017-03-16
  • 打赏
  • 举报
回复
CONSTRAINT [PK_#TT] 去掉即可。
会自动命名主键。反正你也不会对这个主键做操作,不需要关心它怎么命名。

22,300

社区成员

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

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