Cra*_* HB 2 sql sql-server sql-server-2008
我编写了一些代码将数据移动到一个存档表中,一次1000行(SQL Server 2008 R2):
-- archive data
while (@QuitLoop = 0)
begin
begin transaction
insert into MyTransactionTable (...)
select top 1000 * from MyTransactionTable where DateOfSale < @ArchiveCutOffDate
delete top 1000 from MyTransactionTable where DateOfSale < @ArchiveCutOffDate
if (@@rowcount = 0) select @QuitLoop = 1
commit transaction
end
Run Code Online (Sandbox Code Playgroud)
top会不会返回相同的1000行?
因此,插入到归档表中的行与从事务表中删除的行相同.
由于您没有使用它们,因此无法保证它们返回相同的行.
为什么?因为您没有指定order by子句.它只是引擎决定的1000条记录,是时间周围的"顶级"记录.
另请注意,即使您指定了order by仍然不会获得相同的1000行,也可能...如果您的订单不够有选择性,那么在第1000项的边界上是特定的,可定义的订单.
例如; 如果在顶部有1002个具有相同排序值的项目,则您不知道哪个项目不包括在内.
| 归档时间: |
|
| 查看次数: |
1044 次 |
| 最近记录: |