主要问题:
我想截断并刷新 SQL Server 中的表,但想等到当前访问该表的任何查询完成。这是 SQL Server 中的一个简单设置,还是我需要创建一些逻辑来完成它?
详细说明:
我有一个位于大约 300 个终端上的 VB 应用程序。应用程序每 2 分钟调用一次 SqlServer(2008 R2) 存储过程 ([spGetScreenData]) 以获取最新的销售数据。
[spGetScreenData] 创建一系列临时表并返回大约 200 行和 100 列的选择查询。执行大约需要 8 秒。
我的目标是创建一个每两分钟执行一次的新存储过程 ([spRefreshScreenData]),它将刷新表 ([SCREEN_DATA]) 中的数据。然后我将更改 [spGetScreenData] 以简单地查询 [SCREEN_DATA]。
刷新 [SCREEN_DATA] 的作业在执行时首先将状态表中的标志设置为“RUNNING”。一旦完成,它就会将该状态设置为“已完成”。
[spGetScreenData] 在查询之前检查标志的状态并等待(一段时间)直到它准备好。就像是...
DECLARE @Condition AS BIT=0
, @Count AS INT=0
, @CycleCount AS INT=10 --10 cycles (20 Seconds)
WHILE @Condition = 0 AND @Count < @CycleCount
BEGIN
SET @Count = @Count + 1
IF EXISTS( SELECT Status
FROM tbl_Process_Status
WHERE Process = 'POS_Table_Refresh'
AND Status='Running')
WAITFOR DELAY '000:00:02' --Wait 2 seconds
ELSE
SET @Condition=1
END
SELECT *
FROM SCREEN_DATA
WHERE (Store=@Store OR @Store IS NULL)
我的担忧与 [spRefreshScreenData] 有关。当 [spRefeshScreenData] 开始截断时,可能有几十个对当前正在运行的数据的请求。
SqlServer 会在截断之前简单地等到请求完成吗?有没有我必须设置的设置才能不弄乱这些查询?
还是我必须建立一些机制来等到所有请求都完成后再开始截断?