在重新加载时阻止桌子

时间:2017-01-03 00:07:40

标签: sql sql-server-2012

在我们的数据仓库中,我们有一个每小时被截断/重新加载的表。这个过程通常需要几秒钟。

我们最近发现一些挂掉它们的报告是空白的,并且发现加载此表的任务需要10分钟而不是几秒钟(我已修复的单独问题)。

我们想要做的是在发生截断/重载时锁定此表。我们如何才能这样做,以便在任务完成之前阻止查看此表的任何查询?我们只是简单地围绕它进行交易吗?

编辑:我已经测试了这个,它似乎做了我想要的。这是解决问题的正确方法吗?

BEGIN TRANSACTION
BEGIN TRY
  TRUNCATE TABLE dbo.MatProduct
  INSERT INTO dbo.MatProduct (
  ...
  )
END TRY
BEGIN CATCH
  --Rethrow the error
  DECLARE 
    @ErrorMessage NVARCHAR(4000),
    @ErrorSeverity INT,
    @ErrorState INT
  SELECT 
    @ErrorMessage = ERROR_MESSAGE(),
    @ErrorSeverity = ERROR_SEVERITY(),
    @ErrorState = ERROR_STATE()
  RAISERROR (
    @ErrorMessage,
    @ErrorSeverity,
    @ErrorState    
  )

  --Rollback the transaction if an error occurred
  IF @@TRANCOUNT > 0
    ROLLBACK TRANSACTION;
END CATCH

--Commit the transaction if there were no errors
IF @@TRANCOUNT > 0
  COMMIT TRANSACTION;

0 个答案:

没有答案