建议的重复内容未回答标题中的问题。
我想锁定一个表,使其无法写入,但可以读取。这可能吗?
这与IsolationLevel.Serializable
的交易中会发生什么?或者只是受影响的行? (这也是对读取的锁定吗?)
如果重要:我在C#中这样做。
答案 0 :(得分:0)
您应该在表上创建一个UNIQUE约束。即使您设法通过第一个进程锁定表,另一个进程很可能仅在第一个进程存在之前被阻止。
然后,您可能会开始摆弄超时,以确保第二个进程在访问表之前超时,并且您正在开启一个痛苦的世界。
包含构成重复的任何字段的UNIQUE约束是目前最好的选择 - 并且将确保不输入重复项,因为我理解您的问题(和详细说明)是最终目标。
答案 1 :(得分:-1)
不可能。
只有持有锁的会话才能访问该表。在解除锁定之前,没有其他会话可以访问它。
请参阅以下链接:
答案 2 :(得分:-1)
您可能想要查找NOLOCK / ReadUncommitted选项:http://www.mssqltips.com/sqlservertip/2470/understanding-the-sql-server-nolock-hint/
它将允许您从当前锁定的表中读取数据,但要注意其含义:您最终可能会读取“ghost”数据,即已插入然后在事务中回滚的数据。