Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Какво се случва, ако промените съхранена процедура, докато тя работи?

Току-що тествах това в SQL Server 2008 R2

Започнах с:

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

След това направих следнотоПрозорец на заявка на SQL Server 1:

EXEC dbo.Stupid

Прозорец на заявка 2 на SQL Server, докато заявката в прозорец на заявка 1 се изпълняваше:

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

EXEC dbo.Stupid

Прозорец на заявка 3 на SQL Server, докато се изпълняваха заявки в прозорец на заявка 1 и прозорец на заявка 2:

EXEC dbo.Stupid

Резултати:

  • Прозорец на заявката 1 се изпълни за 10 секунди (и следователно завърши след прозорци 2 и 3) и върна идентификатори 1 - 5
  • Прозорецът на заявката 2 промени и изпълни процедурата за 5 секунди и върна идентификатори 6 - 10
  • Прозорецът на заявката 3 се изпълни за 5 секунди и върна идентификатори 6 - 10

Какво се случва:

  • Вече изпълняваният код ще завърши изпълнението на процедурата, както беше при стартирането им
  • Всичко, което започне да се изпълнява след промяна на кода, ще изпълни новия код


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sql Server детерминистична дефинирана от потребителя функция

  2. Проблем с множество SQL известия в уеб приложение ASP.Net при опресняване на страницата

  3. Как може Hibernate да картографира SQL типа данни nvarchar(max)?

  4. Базата данни „само за четене“ не може да се свие | Свиване на дневника на транзакциите, докато използвате групата за наличност AlwaysOn

  5. Поддържа ли SQL Server клауза IS DISTINCT FROM?