如何在更新时禁用/拒绝访问SQL表

时间:2013-12-19 17:16:42

标签: sql updates database-table

我有一个SSIS包每天截断并加载表,我需要确保在更新时没有人可以访问这些表...因为他可能会得到部分数据。

这样做的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

听起来你需要使用独占表锁,使用以下代码启动你的事务(随意纠正任何语法错误,因为我是postgres / oracle人)

SET TRANSACTION ISOLATION LEVEL TABLOCKX
GO
BEGIN TRANSACTION

在这里做你的工作。然后提交或回滚。

有关详细信息,请参阅this msdn article

答案 1 :(得分:0)

您也可以使用HOLDLOCK或DBLOCK

SQL SERVER - 锁定提示

ROWLOCK 在读取或修改数据时使用行级锁。

PAGLOCK 在读取或修改数据时使用页面级锁定。

TABLOCK 在读取或修改数据时使用表锁。

DBLOCK 在读取或修改数据时使用数据库锁。

UPDLOCK UPDLOCK在不阻塞其他读取器的情况下读取数据,并在以后保证数据自上次读取后未发生更改时进行更新。

XLOCK 在读取表时使用排他锁而不是共享锁,并使用保持锁直到语句或事务结束。

HOLDLOCK 使用保持锁来保持锁定直到事务完成,而不是在不再需要所需的表,行或数据页时立即释放锁。

NOLOCK 这不会锁定任何对象。这是SELECT操作的默认值。它不适用于INSERT,UPDATE和DELETE语句。

实施例:
    SELECT OrderID
    来自订单(ROWLOCK)
    订单ID在100和2000之间

 UPDATE Products WITH (NOLOCK)
 SET ProductCat = 'Machine'
 WHERE ProductSubCat = 'Mac'