[英]SQL - How can I temporarily protect the data in this table?
我正在填充一个充当缓存的表。 (这是必需的,因为数据来自链接服务器,并且通过链接进行连接太昂贵了)
我在下面包括了伪代码,希望能演示我正在尝试做的事情。 我真的不知道是否有办法像这样锁定表,或者是否需要使用事务,但这是基础知识:
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.