SQL - Как я могу временно защитить данные в этой таблице? - PullRequest
0 голосов
/ 04 августа 2010

Я заполняю таблицу, которая действует как кеш.(Это необходимо, потому что данные поступают через связанный сервер и соединения по ссылке слишком дороги)

Я включил ниже псевдокод, который, надеюсь, демонстрирует, что я пытаюсь сделать.Я действительно не знаю, есть ли способ заблокировать таблицу таким образом, или мне нужно использовать транзакции, но вот основы:

  1. Удалить все в CacheTable
  2. Заполните cacheTable
  3. Обработайте данные в CacheTable в течение 10 секунд (важно, чтобы другие экземпляры этой хранимой процедуры не удаляли CacheTable во время обработки!)
  4. Возвращать обработанные результаты (CacheTableснова свободен)

 delete from CacheTable -- If this errors because it is locked, exit stored procedure

 [[Lock CacheTable]] 
 insert into CacheTable
 exec RemoteDB.dbo.[sp_GrabRecords] @Start, @End, @Key

 Process Cached Data
 ...
 Select Processed Data

 [[Unlock CacheTable]]

Как защитить данные в этой CacheTable во время их обработки?

Примечание: я также ищу альтернативы.Я пытался использовать табличную переменную, но она была слишком медленной, вероятно, потому что у нее не было первичного ключа.Даже не уверен, что переменные таблиц могут иметь первичные ключи.Я просто знаю, что описанный выше метод очень быстр, но у него есть проблема со столкновениями, очевидно,

Ответы [ 2 ]

1 голос
/ 04 августа 2010

не означает, что CacheTable является временной таблицей, поэтому каждый экземпляр хранимой процедуры должен выделять свою собственную;таким образом избегая проблемы блокировки

1 голос
/ 04 августа 2010

Добавьте столбец GUID (uniqueidentifier) в таблицу кеша. Пусть каждый исполняемый экземпляр хранимой процедуры создаст новый GUID (NEWID()) для уникальной идентификации его строк в кэшированной таблице. Таким образом, вам не нужно блокировать другие запущенные экземпляры.

Когда закончите, удалите строки, которые соответствуют только вашему GUID.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...