Я заполняю таблицу, которая действует как кеш.(Это необходимо, потому что данные поступают через связанный сервер и соединения по ссылке слишком дороги)
Я включил ниже псевдокод, который, надеюсь, демонстрирует, что я пытаюсь сделать.Я действительно не знаю, есть ли способ заблокировать таблицу таким образом, или мне нужно использовать транзакции, но вот основы:
- Удалить все в CacheTable
- Заполните cacheTable
- Обработайте данные в CacheTable в течение 10 секунд (важно, чтобы другие экземпляры этой хранимой процедуры не удаляли CacheTable во время обработки!)
- Возвращать обработанные результаты (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 во время их обработки?
Примечание: я также ищу альтернативы.Я пытался использовать табличную переменную, но она была слишком медленной, вероятно, потому что у нее не было первичного ключа.Даже не уверен, что переменные таблиц могут иметь первичные ключи.Я просто знаю, что описанный выше метод очень быстр, но у него есть проблема со столкновениями, очевидно,