Может ли сгенерированная таблица быть удалена в транзакции, чтобы предотвратить доступ других людей к ней во время ее обновления - PullRequest
0 голосов
/ 02 августа 2011

два связанных вопроса: у меня есть таблица, которая используется в производственной или живой среде. Является ли целесообразным и возможно ли начать транзакцию с этой таблицы, чтобы гарантировать, что никто не использует эту таблицу, когда она отбрасывается и повторно генерируется, а затем фиксируется или откатывается так, что пользователи на активной стороне не заметят? Может быть лучше удалить строки, а затем заново заполнить строки. Вторая часть вопроса заключается в том, как мне выполнить удаление или удаление строки в операторе транзакции, или это должно быть сделано в таблице базы данных временных данных?

Спасибо.

1 Ответ

1 голос
/ 02 августа 2011

1) для блокировки всей таблицы при обновлении вы можете использовать табличные подсказки (см. http://msdn.microsoft.com/en-us/library/ms187373%28v=SQL.100%29.aspx),, например

USE AdventureWorks;
GO
UPDATE Production.Product
WITH (TABLOCK)
SET ListPrice = ListPrice * 1.10
WHERE ProductNumber LIKE 'BK-%';
GO

2) чтобы удалить все строки в таблице, вам нужно использовать TRUNCATE TABLE. Как говорит BOL, TRUNCATE TABLE всегда блокирует таблицу и страницу, но не каждую строку. Поэтому, если кто-то заблокирует одну из записей в этой таблице, вы не сможете заблокировать эту таблицу, и TRUNCATE не может начаться.

...