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