我正在从后端系统提取数据子集以加载到 SQL 表中,以供多个本地系统查询。我不希望数据集非常大 - 不超过几千条记录。提取将在 SQL2008 服务器上每两分钟运行一次。本地系统 24 x 7 全天候使用。
在我的原型中,我将数据提取到临时表中,然后删除活动表并重命名临时表以成为显式事务中的活动表。
SELECT fieldlist
INTO Temp_MyTable_Staging
FROM FOOBAR;
BEGIN TRANSACTION
IF(OBJECT_ID('dbo.MyTable') Is Not Null)
DROP TABLE MyTable;
EXECUTE sp_rename N'dbo.Temp_MyTable_Staging', N'MyTable';
COMMIT
我发现了很多关于事务和锁的理论的帖子,但是没有一个可以解释如果计划的作业在删除/重命名执行时尝试在几毫秒内查询表时实际发生的情况。计划的作业只是等待片刻,还是终止?相反,如果在计划作业从活动表中选择时开始重命名会发生什么?事务是否未能获得锁定并因此终止?