我有一个非常有趣的问题。
我有一个数据表,内容如下: DVDSerialNumbers(ID, Create_Date, SerialNumber, CategoryID)
我的应用程序生成DVD的序列号,我有一个像这样的SQL命令(由我的应用程序发出):
ExecuteQuery("select top {0} SerialNumber from DVDSerialNumbers where CategoryID = {1};" &
"delete from DVDSerialNumbers where ID in (select top{0} ID from DVDSerialNumber where " &
"CategoryID = {1});", n, CategoryID)
ExecuteQuery会返回我的select查询结果,但同时也会执行删除命令。
基本上,我只得到给定CategoryID的n个序列号,并删除它们的行。
然而,这里存在并发问题。如果以上代码在同一时间运行两次,则结果可能相同,但是想要从表中获取给定的SerialNumber仅一次。
如何才能让B实例等待A实例完成此命令?我应该锁定表吗?还是应该锁定某些行?或者有更好的解决方案?
提前感谢您的帮助。