sql >> Database teknologi >  >> RDS >> Sqlserver

Hvad sker der, hvis man ændrer en lagret procedure, mens den kører?

Jeg har lige testet dette i SQL Server 2008 R2

Jeg startede med:

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

Jeg gjorde derefter følgendeSQL Server Query Window 1:

EXEC dbo.Stupid

SQL Server Query Window 2, mens forespørgslen i Query Window 1 kørte:

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, mens forespørgsler i Query Window 1 og Query Window 2 kørte:

EXEC dbo.Stupid

Resultater:

  • Forespørgselsvindue 1 kørte på 10 sekunder (og sluttede derfor efter Windows 2 og 3) og returnerede id'er 1 - 5
  • Forespørgselsvindue 2 ændrede og kørte proceduren på 5 sekunder og returnerede id'er 6 - 10
  • Forespørgselsvindue 3 kørte på 5 sekunder og returnerede id'er 6 - 10

Hvad sker der:

  • Allerede udførelse af kode vil fuldføre kørsel på proceduren, som den var, da den blev startet
  • Alt, der begynder at køre, efter at koden er ændret, vil køre den nye kode


  1. Hvordan man henter billede fra databasen og viser billedet på websiden

  2. php pdo emulate_prepares false stringify_fetches false int still string

  3. Findes der en utf8_unicode_cs-sortering?

  4. Er der en Oracle SQL-forespørgsel, der samler flere rækker i én række?