繁体   English   中英

SQL-如何临时保护此表中的数据?

[英]SQL - How can I temporarily protect the data in this table?

我正在填充一个充当缓存的表。 (这是必需的,因为数据来自链接服务器,并且通过链接进行连接太昂贵了)

我在下面包括了伪代码,希望能演示我正在尝试做的事情。 我真的不知道是否有办法像这样锁定表,或者是否需要使用事务,但这是基础知识:

  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中的数据时,如何保护它?

注意:我也在寻找替代品。 我尝试使用表变量,但是它太慢了,可能是因为它没有主键。 甚至不确定表变量是否可以具有主键。 我只知道上面的方法非常快,但是很明显它有碰撞问题

将一个GUID( uniqueidentifier )列添加到您的缓存表。 让存储过程的每个执行实例创建一个新的GUID( NEWID() ),以唯一标识其在缓存表中的行。 这样,您无需锁定其他正在运行的实例。

完成后,删除仅与您的GUID匹配的行。

CacheTable不是一个临时表,因此存储过程的每个实例都应该分配它自己的; 从而避免了锁定问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM