Oto kroki, jak napisać kursor
1-Zadeklaruj kursor przez używanie nazwy kursora z instrukcją Select
2- Otwórz kursor, aby wypełnić dane wyjściowe instrukcji Select
3 - Pobierz wiersze, aby przetworzyć je jeden po drugim
4- Zamknij kursor
5- De-alokacja kursora
Spotykamy się z różnymi sytuacjami, w których możemy użyć kursorów. Poniżej znajduje się kilka przykładów, w których możemy użyć kursorów
Przykłady:
1-- Zabij wszystkie połączenia z bazy danych SQL Server
2-- Dodaj nowe kolumny, takie jak CreatedBy do wszystkie tabele w bazie danych
3-Włącz/wyłącz wszystkie wyzwalacze w bazie danych SQL Server
4-Generuj skrypty/Utwórz kopię zapasową całej bazy danych na serwerze SQL Server jeden po drugim
5 --Truncate/Delete wszystkie tabele z bazy danych SQL Server
Przykładowy kod:
Poniższy kod może służyć do zabijania wszystkich procesów w bazie danych. Nie możemy zmienić nazwy bazy danych, jeśli jakiś proces uzyskuje dostęp do bazy danych. Aby zmienić nazwę, musimy zabić wszystkie procesy, zanim zmienimy nazwę bazy danych w SQL Server.
USE MASTER
GO
DECLARE @DatabaseName AS VARCHAR(500)
-->Provide the DataBaseName for which want to Kill all processes.
SET @DatabaseName='TestDB'
DECLARE @Spid INT
--1: Declare Cursor:
DECLARE KillProcessCur CURSOR FOR
SELECT spid
FROM sys.sysprocesses
WHERE DB_NAME(dbid) = @DatabaseName
--2: OPEN Cursor
OPEN KillProcessCur
--3: Fetch A record
FETCH Next FROM KillProcessCur INTO @Spid
--Loop Through the Rows one by one
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @SQL VARCHAR(500)=NULL
SET @SQL='Kill ' + CAST(@Spid AS VARCHAR(5))
PRint @SQL
EXEC (@SQL)
PRINT 'ProcessID =' + CAST(@Spid AS VARCHAR(5))
+ ' killed successfull'
FETCH Next FROM KillProcessCur INTO @Spid
END
--4: Close the Cursor
CLOSE KillProcessCur
--5: Deallocate Cursor
DEALLOCATE KillProcessCur