Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Definieren Sie die Schritte für den SQL Server-Cursor – SQL Server / TSQL-Lernprogramm

Cursor sind Objekte, die uns in SQL Server zur Verfügung gestellt werden, um zeilenweise Operationen durchzuführen.

Hier sind die Schritte, wie Sie einen Cursor schreiben

1- Deklarieren Sie einen Cursor durch Verwenden des Namens des Cursors mit einer Select-Anweisung
2- Öffnen Sie den Cursor, um ihn mit der Ausgabe der Select-Anweisung zu füllen
3- Rufen Sie die Zeilen ab, um sie nacheinander zu verarbeiten
4- Schließen Sie den Cursor
5- Cursor freigeben

Wir begegnen verschiedenen Situationen, in denen wir Cursor verwenden können. Unten sind einige Beispiele, in denen wir Cursor verwenden können

Beispiele:
1-- Beenden Sie alle Verbindungen von einer SQL Server-Datenbank
2-- Fügen Sie eine neue Spalte wie z. B. CreatedBy hinzu alle Tabellen in einer Datenbank
3--Aktivieren/Deaktivieren aller Trigger in einer SQL Server-Datenbank
4--Generieren von Skripts/Erstellen einer Sicherung aller Datenbanken auf SQL Server nacheinander
5 --Truncate/Delete all the tables from a SQL Server Database


Beispielcode:
Der folgende Code kann verwendet werden, um alle Prozesse einer Datenbank zu beenden. Wir können eine Datenbank nicht umbenennen, wenn irgendein Prozess auf die Datenbank zugreift. Zum Umbenennen müssen wir alle Prozesse beenden, bevor wir die Datenbank in SQL Server umbenennen.

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