选择并设置列值

时间:2015-04-06 20:54:26

标签: sql sql-server tsql

我有一个简单的表包含几列:Id, Name, Profit, IsBusyIsBusy的值为BIT。 我需要创建一个sql脚本将选择所有不忙项(IsBusy为0)并同时将此标志设置为1.因此,另一个串行或并行查询将不会获得此条目,因为该标志为1。 可能存在一些技术来释放我的任务?感谢。

2 个答案:

答案 0 :(得分:4)

您在处理某些特定行时要求阻止用户访问数据,应使用TRANSACTIONS和ISOLATION LEVEL进行处理。

你应该研究最严格的隔离级别,即SERIALIZABLE。

您应该将事务隔离级别更改为SERIALIZABLE,然后选择行,它将获取锁定其他可能也想要读取相同行的用户的行的排它锁。

您可以使用以下命令将事务隔离级别更改为SERIALIZABLE。

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

重要提示

请注意,这可能会导致用户被广泛阻止,并且您可能最终会遇到屏幕不断冻结的许多不满意的最终用户:)。

您还提到要选择行然后更新。

Update语句在默认隔离级别下的行上获取UPDATE LOCK(读取未提交)如果要更新行,则在提交或回滚更新之前,用户将无法访问该行。

答案 1 :(得分:2)

以下内容适用于您?

update X
set IsBusy = 1
output inserted.Id, inserted.Name
where IsBusy = 0