Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Definire i passaggi per SQL Server Cursor - Tutorial SQL Server/TSQL

I cursori sono oggetti che ci vengono forniti in SQL Server per eseguire operazioni riga per riga.

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