Seçilen veritabanına veya sunucuya tüm bağlantıları kesmek için Saklı Yordam
SQL Saklı Yordam, onu çağıran işlem dışında, seçilen veritabanına veya sunucuya olan tüm bağlantıları kesmek için.
giriiş
Tüm kullanıcıların veritabanınızla bağlantısını kesmeniz gereken zamanlar olabilir, bir örnek Günlük Gönderimi çoğaltması içindir. Aşağıdaki kod, veritabanının geri yükleme görevi tarafından özel modda açılması gerektiğinden her 20 dakikada bir güncellenen bir raporlama sunucusunda kullanıldı.
Aşağıdaki kod bir veritabanı adını kabul eder, bu nedenle yalnızca bir kez yazılması ve ana veya yardımcı programlar (eğer oluşturduysanız) veritabanında saklanması gerekir. Daha sonra başka herhangi bir süreçten çağrılabilir, bizim durumumuzda bunun üzerindeki belgedeki tam bakım planı.
Bu, etkin bağlantıların bir listesini alan ve her biri arasında dolaşan, süreci ve bağlantıyı öldüren oldukça basit bir saklı yordamdır.
SQL Code
CREATE PROC KillConnections(@database VARCHAR(50))AS BEGINSET NOCOUNT ON;DECLARE @spid INTDECLARE @killstatement NVARCHAR(10)--Declare a cursor to select the users connected to the specified databaseDECLARE c1 CURSOR FAST_FORWARD FOR SELECT request_session_id FROM sys.dm_tran_locksWHERE resource_type='DATABASE'AND(DB_NAME(resource_database_id)=@database OR @database IS NULL)OPEN c1FETCH c1 INTO @spidWHILE @@FETCH_STATUS=0 BEGIN IF @@SPID<>@spid--Don't kill the connection of the user executing this statement BEGIN -- Construct dynamic sql to kill spid SET @killstatement='KILL '+CAST(@spid AS VARCHAR(5)) EXEC sp_executesql @killstatement PRINT @spid-- Print killed spid END FETCH NEXT FROM c1 INTO @spidEND-- Clean upCLOSE c1DEALLOCATE c1ENDGO