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

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

以及锁定之后如何对该行数据进行释放?

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

首先,得在一个大transaction里面,我假设你的C#层已经做了transaction了,然后可以:
[CODE]
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

[/CODE]

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

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

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