sql >> Databasteknik >  >> RDS >> Sqlserver

Vad händer om man ändrar en lagrad procedur medan den körs?

Jag har precis testat detta i SQL Server 2008 R2

Jag började med:

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

Jag gjorde sedan följandeSQL Server Query Window 1:

EXEC dbo.Stupid

SQL Server Query Window 2, medan frågan i Query Window 1 kördes:

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, medan frågor i Query Window 1 och Query Window 2 kördes:

EXEC dbo.Stupid

Resultat:

  • Frågefönster 1 kördes på 10 sekunder (och slutfördes därför efter fönster 2 och 3) och returnerade id 1 - 5
  • Frågefönster 2 ändrade och körde proceduren på 5 sekunder och returnerade id 6 - 10
  • Frågefönster 3 kördes på 5 sekunder och returnerade id 6 - 10

Vad händer:

  • Redan exekvering av kod kommer att slutföra körningen på proceduren som den var när den startades
  • Allt som börjar köras efter att koden har ändrats kommer att köra den nya koden


  1. Varför Oracle 10g inte klagar på kolumn tvetydighet?

  2. Välj endast den numeriska delen av strängen endast om den börjar med ett numeriskt värde

  3. Använder SQLCipher med Android

  4. Barman Cloud – Del 1:WAL Archive