锁定SQL Server表以进行写入但不进行读取

时间:2013-04-16 08:48:59

标签: c# .net sql sql-server

建议的重复内容未回答标题中的问题。

我想锁定一个表,使其无法写入,但可以读取。这可能吗?

这与IsolationLevel.Serializable的交易中会发生什么?或者只是受影响的行? (这也是对读取的锁定吗?)

如果重要:我在C#中这样做。

3 个答案:

答案 0 :(得分:0)

您应该在表上创建一个UNIQUE约束。即使您设法通过第一个进程锁定表,另一个进程很可能仅在第一个进程存在之前被阻止。

然后,您可能会开始摆弄超时,以确保第二个进程在访问表之前超时,并且您正在开启一个痛苦的世界。

包含构成重复的任何字段的UNIQUE约束是目前最好的选择 - 并且将确保不输入重复项,因为我理解您的问题(和详细说明)是最终目标。

答案 1 :(得分:-1)

不可能。

只有持有锁的会话才能访问该表。在解除锁定之前,没有其他会话可以访问它。

请参阅以下链接:

http://msdn.microsoft.com/en-gb/library/ms173763.aspx

答案 2 :(得分:-1)

您可能想要查找NOLOCK / ReadUncommitted选项:http://www.mssqltips.com/sqlservertip/2470/understanding-the-sql-server-nolock-hint/

它将允许您从当前锁定的表中读取数据,但要注意其含义:您最终可能会读取“ghost”数据,即已插入然后在事务中回滚的数据。