sql >> Database >  >> RDS >> Sqlserver

Definieer de stappen voor de SQL Server-cursor - SQL Server / TSQL-zelfstudie

Cursors zijn objecten die ons in SQL Server worden aangeboden om rij voor rij bewerkingen uit te voeren.

Hier zijn de stappen hoe u een cursor schrijft

1-Declare A Cursor door de naam van de cursor gebruiken met een Select-instructie
2- Cursor openen om de uitvoer van de Select-instructie te vullen
3- Haal de rijen op om ze een voor een te verwerken
4- Sluit de cursor
5- Cursor de-toewijzing opheffen

We komen verschillende situaties tegen waarin we cursors kunnen gebruiken. Hieronder staan ​​enkele voorbeelden waarin we cursors kunnen gebruiken

Voorbeelden:
1-- Alle verbindingen van een SQL Server-database beëindigen
2-- Nieuwe kolommen, zoals CreatedBy, toevoegen aan alle tabellen in een database
3--Alle triggers in een SQL Server-database inschakelen/uitschakelen
4--Scripts genereren/Een voor één een back-up maken van alle databases op SQL Server
5 --Truncate/Delete alle tabellen uit een SQL Server-database


Voorbeeldcode:
De onderstaande code kan worden gebruikt om alle processen naar een database te beëindigen. We kunnen de naam van een database niet wijzigen als een proces toegang heeft tot de database. Om te hernoemen moeten we alle processen doden voordat we de database hernoemen 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
 
 
 
 
  1. Hoe te repareren van de "datediff-functie resulteerde in een overloop" Fout in SQL Server

  2. Waarom postgres de index niet gebruikt in mijn zoekopdracht

  3. Heroku Postgres:Te veel verbindingen. Hoe vernietig ik deze verbindingen?

  4. Moet scalaire variabele @Id declareren?