• 全部
  • 基础类
  • 应用实例
  • 新技术前沿

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
...全文
448 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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)
....

事务结束将自动释放锁
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-03-06 10:08
社区公告
暂无公告