2017-08-21 5 views
1

Une erreur se produit lorsque j'appelle ALTER TABLE REBUILD dans une procédure stockée et que j'essaie de SÉLECTIONNER des données dans une autre simultanément.Erreur U-SQL lors de la reconstruction de la table

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

Y a-t-il des solutions pour l'éviter? Merci d'avance!

Répondre

3

Vous êtes dans une situation de concurrence entre la reconstruction et la lecture de la même table.

La reconstruction d'une table crée un nouveau fichier en compactant les fichiers créés lors de l'insertion. Malheureusement maintenant, une fois que la reconstruction est en train de supprimer l'ancien fichier, vous perdrez l'accès à l'ancienne version et vous obtiendrez un message d'erreur.

Nous sommes conscients de ce problème et avons créé un élément de travail pour préserver l'accès à l'ancien fichier pour les requêtes démarrées (fournissant une sémantique d'instantané). Cependant, je n'ai pas d'ETA pour le moment.

Ainsi jusque-là, veuillez planifier votre reconstruction et lire les travaux sans chevauchement.

Remarque: Vous pouvez toujours reconstruire et insérer simultanément ou insérer et lire.

+0

Je l'ai eu. Merci pour votre réponse! –

+1

@MichaelRys J'ai supprimé ma réponse. Merci de mettre à jour la documentation :) – lad2025