Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Que se passe-t-il si vous modifiez une procédure stockée pendant son exécution ?

Je viens de tester cela dans SQL Server 2008 R2

J'ai commencé par :

CREATE PROCEDURE dbo.Stupid
AS
WAITFOR DELAY '0:00:10'
SELECT TOP 5 * FROM dbo.UniqueId
GO

J'ai ensuite fait ce qui suitSQL Server Query Window 1 :

EXEC dbo.Stupid

Fenêtre de requête SQL Server 2, alors que la requête de la fenêtre de requête 1 était en cours d'exécution :

ALTER PROCEDURE dbo.Stupid
AS
WAITFOR DELAY '0:00:05'
SELECT TOP 5 * FROM dbo.UniqueId
WHERE ID > 5
GO

EXEC dbo.Stupid

Fenêtre de requête SQL Server 3, alors que les requêtes des fenêtres de requête 1 et 2 étaient en cours d'exécution :

EXEC dbo.Stupid

Résultats :

  • La fenêtre de requête 1 s'est exécutée en 10 secondes (et s'est donc terminée après les fenêtres 2 et 3) et a renvoyé les identifiants 1 à 5
  • La fenêtre de requête 2 a modifié et exécuté la procédure en 5 secondes, et a renvoyé les identifiants 6 à 10
  • La fenêtre de requête 3 s'est exécutée en 5 secondes et a renvoyé les identifiants 6 à 10

Que se passe-t-il :

  • Le code déjà en cours d'exécution terminera l'exécution de la procédure telle qu'elle était lors de son démarrage
  • Tout ce qui commence à s'exécuter après la modification du code exécutera le nouveau code