Ecco i passaggi come si scrive un cursore
1-Dichiara un cursore di utilizzando il nome del cursore con un'istruzione Select
2- Apri il cursore per popolare con l'output dell'istruzione Select
3- Recupera le righe per elaborarle una dopo una
4- Chiudi il cursore
5- De-allocare il cursore
Ci troviamo di fronte a diverse situazioni in cui possiamo usare i cursori. Di seguito sono riportati alcuni esempi in cui è possibile utilizzare i cursori
Esempi:
1-- Interrompi tutte le connessioni da un database di SQL Server
2-- Aggiungi una nuova colonna come CreatedBy a tutte le tabelle in un database
3--Abilita/Disabilita tutti i trigger in un database di SQL Server
4--Genera script/Effettua il backup di tutti i database su SQL Server uno dopo l'altro
5 --Tronca/Elimina tutte le tabelle da un database di SQL Server
Codice di esempio:
Il codice seguente può essere utilizzato per terminare tutti i processi in un database. Non possiamo rinominare un database se qualsiasi processo sta accedendo al database. Per rinominare dobbiamo uccidere tutti i processi prima di rinominare il database in 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