sql >> Database >  >> RDS >> Sqlserver

Wat gebeurt er als een opgeslagen procedure wordt gewijzigd terwijl deze wordt uitgevoerd?

Ik heb dit zojuist getest in SQL Server 2008 R2

Ik begon met:

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

Ik deed toen het volgendeSQL Server Query-venster 1:

EXEC dbo.Stupid

SQL Server Query Window 2, terwijl query in Query Window 1 actief was:

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

EXEC dbo.Stupid

SQL Server Query Window 3, terwijl queries in Query Window 1 en Query Window 2 actief waren:

EXEC dbo.Stupid

Resultaten:

  • Queryvenster 1 liep in 10 seconden (en eindigde daarom na Windows 2 en 3), en gaf id's 1 - 5 terug
  • Queryvenster 2 veranderde en voerde de procedure uit in 5 seconden, en gaf id's 6 - 10 terug
  • Query Window 3 liep in 5 seconden en leverde id's 6 - 10 op

Wat gebeurt er:

  • Als code al wordt uitgevoerd, wordt de procedure voltooid zoals deze was toen ze werden gestart
  • Alles dat begint te lopen nadat de code is gewijzigd, voert de nieuwe code uit


  1. MySQL VARCHAR-resultaten bestellen

  2. Gegevens ophalen uit een Oracle-database als een CSV-bestand (of een ander aangepast tekstformaat)

  3. Syntaxisfout in SQL-instructie "WITH" sleutelwoordwerpuitzondering

  4. CONV() functie in sneeuwvlok