2017-08-21 61 views
1

当我在一个存储过程中调用ALTER TABLE REBUILD并尝试在另一个存储过程中同时选择数据时发生错误。表重建时出现U-SQL错误

CREATE PROCEDURE IF NOT EXISTS RebuildContent() 
AS 
BEGIN 

INSERT INTO dbo.Log (Date, Message) 
VALUES (DateTime.UtcNow, "Starting Content table rebuilding ..."); 

ALTER TABLE dbo.Content REBUILD; 

ALTER TABLE dbo.ContentCrc REBUILD; 

INSERT INTO dbo.Log (Date, Message) 
VALUES (DateTime.UtcNow, "Completed Content table rebuilding ..."); 

END; 

enter image description here

是否有任何解决方案,以避免呢? 预先感谢您!

回答

3

您正在遇到重建和读取同一张表之间的竞争条件。

重建表格通过压缩由插入创建的文件来创建一个新文件。不幸的是,现在,一旦重建正在删除旧文件,您将失去对旧版本的访问权限,您将收到一条错误消息。

我们知道这个问题,并且已经创建了一个工作项以保留对已启动查询(提供快照语义)的旧文件的访问权限。但是,我目前没有ETA。

因此,在此之前,请安排您的重建和读取作业没有重叠。

注意:您仍可以同时重建并插入或插入并读取。

+0

我明白了。谢谢您的回答! –

+1

@MichaelRys我删除了我的答案。感谢您更新文档:) – lad2025