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的已经没了。