SET TRANSACTION ISOLATION LEVEL SERIALIZABLE用这个不灵啊

koenemy 2008-03-06 10:08:07
多线程调用些过程。。。@filename还是有重复的 咋回事呀。
CREATE PROCEDURE dbo.p_release
(
@title varchar(40),
@poster varchar(20),
@postdatetime datetime,
@replies int
)
AS
declare @s int,@posterid varchar,@filename varchar(100)
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION
set @posterid=null
select @s=count(*) from post where datediff(day,@postdatetime,getdate())=0
set @filename='/post/'+yewuyuan.dbo.path(@s+1,4,convert(varchar(10),@postdatetime,120))
insert post (poster,posterid,title,filename,postdatetime,replies) values (@poster,@posterid,@title,@filename,@postdatetime,@replies)
If @@error > 0
ROLLBACK TRANSACTION
Else
COMMIT TRANSACTION
select @filename
GO
...全文
532 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
koenemy 2008-03-06
  • 打赏
  • 举报
回复
select @s=count(*) from post where datediff(day,@postdatetime,getdate())=0


对不起兄弟们,,,我看着是咋回事了。。getdate()这应该是字段名。。。。ctrl a 挺害人呀
dawugui 2008-03-06
  • 打赏
  • 举报
回复
未看明白.

不过锁主表的话,多线程就没意义了.

或许按鸟兄的说法,锁住行.
但看你的语句,锁住行也不行.

帮顶.
M1234 2008-03-06
  • 打赏
  • 举报
回复
应该是你的@filename算法问题
chuifengde 2008-03-06
  • 打赏
  • 举报
回复
在begin trans
内的第一行将表post锁住试试
dbcc lockobjectschema(post)
....

事务结束将自动释放锁

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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