如何锁定一个数据库表同时只允许一个人读取和修改

smileruner 2014-05-29 11:44:32
是这样子的
我有一个查询,需要根据ID来查询另一个字段的最大值,然后根据最大值生成一个值再插入到表中。现在出现了一个问题,插入的操作相对于之前的查询还是有一定的时间延迟,以至于如果同时进行相同的操作导致生成的一个值出现重复。

strSQL = "select MAX(ComputerName) from NewComputer Where ComputerName Like 'Z____"& ADUserAccount &"'"

strSql = "INSERT INTO NewComputer " &_
"(computername,Macaddress,OwnerAccount,JoinDate,JoinOperator,DepartmentAb,OuDnPath) " & _
"VALUES ('" & _
NewComputerName & "','" & strMacAddress & "','" & AdUserAccount &"','" & _
Now() & "','" & DomainJoinerName & "','" & strDepartAb & "','" & ADPCOUPath & "')"

我需要在我读取数据后,未插入数据之前,不允许其他人读取该表。并且需要只能锁定一段时间。
...全文
491 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jieweibin 2014-06-05
  • 打赏
  • 举报
回复
对 插入表中的某个字段做约束,如果多个同时写入的值一样的话,则弹出提示,进行回滚;如果插入成功则再更新 最大ID值
發糞塗牆 2014-05-29
  • 打赏
  • 举报
回复
COMMIT TRAN insert into TT (ID) values ('11') 没有这样的T-SQL写法
smileruner 2014-05-29
  • 打赏
  • 举报
回复
引用 1 楼 HEROWANG 的回复:
你给该表加X锁
是的,我尝试过给查询加锁。我是在编写一个VBS脚本,但是导致后面的插入无法执行了。

strSQL = "BEGIN TRAN SELECT * FROM TT WITH (tablockx)"
'strSQL = "select count(*) from NewComputer with(tablockx)"
Set ADResult  =DBconn.Execute(strSQL)
If Err <> 0 Then
    errMsg = "    数据库JoinDomainInfo连接失败!请联系管理员。" 
    Err.Raise vbObjectError + 1011
	Err.Description = errMsg
	Err.Source = "域控制器连接"
	ShowError()
	MsgBox Err.Number & Err.Description
	'WScript.Quit
End If

While Not ADResult.EOF
   	For i = 0 To ADResult.Fields.Count -1 
       	MaxComputerName = ADResult(i).value
   	Next
   ADResult.MoveNext
Wend

strSQL = "COMMIT TRAN  insert into TT (ID) values ('11')"
Set ADResult  =DBconn.Execute(strSQL)
If Err <> 0 Then
    errMsg = "    数据库JoinDomainInfo连接失败!请联系管理员。" 
    Err.Raise vbObjectError + 1011
	Err.Description = errMsg
	Err.Source = "域控制器连接"
	ShowError()
	MsgBox Err.Number & Err.Description
	'WScript.Quit
End If
第二个查询无法进行了...
發糞塗牆 2014-05-29
  • 打赏
  • 举报
回复
那没有了任何并发可言了哦
  • 打赏
  • 举报
回复
你给该表加X锁

22,210

社区成员

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

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