【发布时间】:2017-06-30 06:18:09
【问题描述】:
伪代码:
var data = ExecuteMSSQLQuery(
"SELECT Id FROM Table WHERE Status='not_processed'");
if(ProcessData(data))
{
ExecuteMSSQLQuery(
"UPDATE Table SET Status='processed' WHERE Status='not_processed'");
}
我想确保UPDATE 查询中更新的行与SELECT 返回的行完全相同。我知道一种解决方案是使用临时表。但我心中的问题是——我可以通过将事务隔离级别设置为serilized 来实现这一点吗?还是只影响SELECTs?这里最好的解决方案是什么?
相关数据库是 MSSQL 2012(如果相关)。
【问题讨论】:
-
从逻辑上讲,我会从
select获取ID,并将更新为WHERE Id = <value fetched> -
绝对是一种选择。我想我的问题更多是关于 SQL 服务器为此目的提供的工具。当然,以编程方式生成具有所有所需 ID 的此类查询并不难。
-
我明白了。好吧,我也可以尝试使用 SSIS 来做到这一点。不管怎样,你得到的答案一定会丰富我的知识。
标签: sql sql-server transactions isolation-level