0 0

SQL Server 2000 如何锁定表中的行,使其他线程读取该行时候发生sql异常,不能读取?20

SQL Server 2000 如何锁定表中的行,使其他线程读取该行时候发生sql异常,不能读取?

以及锁定之后如何对该行数据进行释放?
2011年9月15日 13:30

3个答案 按时间排序 按投票排序

0 0

采纳的答案

只能通过transaction和lock让别人读取这行的时候等待。如果真要做。。。高一点山寨也不是不行,不过非常恶心。

首先,得在一个大transaction里面,我假设你的C#层已经做了transaction了,然后可以:

DECLARE @exists INT
SELECT @exists = 1 FROM myTable WITH (NOLOCK) WHERE column = condition

DECLARE @notLocked INT
SELECT @notLocked = 1 FROM myTable WITH (READAPTS) WHERE column = condition

IF @exists = 1 AND @notLocked IS NULL
BEGIN
    RAISERROR(16, 1, 'ERROR')
    RETURN -1
END

SELECT * FROM myTable WITH (ROWLOCK, UPDLOCK) WHERE column = condition



少数情况还是会有等待发生,但概率很小。具体可能需要调整,理解那些index hint后会大致理解吧,看看http://msdn.microsoft.com/en-us/library/ms187373.aspx有帮助,不过sql server 2000的已经没了。

2011年9月20日 23:30
0 0

关于锁的释放,如果transaction rollback或者commit就自动释放了。
如果select的时候不加updlock 默认concurrency level是read committed, 会立刻释放。updlock可以换成xlock更保险,每个lock干啥的可以看文档。

2011年9月20日 23:32
0 0

SQL Server 2000还有这种功力?你是从哪看到过还是自己想这样实现?

2011年9月16日 15:27

相关推荐

    C#的Sql server学习笔记

    **解决方案:** 在SQL Server中,默认的锁定级别为行级锁,这意味着如果一个线程正在更新某一行数据,则该行会被加上排他锁(exclusive lock),从而阻止其他线程对该行进行任何读写操作。为了避免这种情况,可以采用...

    mysql读写锁演示案例

    从上述实验可以看出,一旦某个session对表施加了写锁,其他的session既不能读取也不能更新该表。 #### 三、应用场景 - **数据迁移**:在数据迁移过程中,为了避免数据被修改,可以在迁移之前对相关表加上读锁,...

    详解Mysql事务隔离级别与锁机制.doc

    更新丢失是指两个或多个事务选择同一行,然后基于最初选定的值更新该行,由于每个事务都不知道其他事务的存在,就会发生丢失更新问题。脏读是指一个事务正在对一条记录做修改,在这个事务完成并提交前,这条记录的...

    java中的缓存.pdf

    读已提交则允许一个事务读取其他事务已经提交的数据,这可能导致脏读。 文档中还出现了一些混乱的字符序列,可能是OCR扫描错误或者页面损坏,但从中可以推测,文档可能在讨论Hibernate的ID生成机制,比如使用...

    ibm数据库管理资料db2资源锁管理

    - **更新锁(Update Lock)**:允许锁的所有者读取并可能修改锁定的数据,其他进程仅能申请共享锁。在需要修改数据时,必须将更新锁升级为排它锁。 - **排它锁(Exclusive Lock)**:只允许锁的所有者读取和修改数据。在...

    2021-2022计算机二级等级考试试题及答案No.15991.docx

    - **知识点**:简单地删除带有病毒的文件并不能完全清除病毒,因为病毒可能会感染其他文件或系统区域。 - **正确选项**:“错误”。 ### 22. 集合的数据类型限制 - **知识点**:在Java等编程语言中,集合(如List,...

    java面试题集锦

    该行代码创建了两个对象:一个是字符串常量池中的"ChengFengIntelligent",另一个是String类的新实例。 **3. Hashtable的原理及与HashMap的区别** - **Hashtable**: 是一个键值对集合,它不允许null键和null值,...

    mysql启动时报错:Starting MySQL… ERROR! The server quit without updating PID file

    The server quit without updating PID file”的启动错误时,通常意味着服务器未能成功启动并更新其进程ID(PID)文件,这可能是由于多种原因造成的。以下是一些可能的解决方案: 1. **数据目录权限问题**: 如果...

Global site tag (gtag.js) - Google Analytics