Ето стъпките как да напишете курсор
1-Декларирайте курсор от използване на името на курсора с оператор Select
2- Отворете курсора, за да попълните изхода на оператор Select
3- Извлечете редовете, за да ги обработите един след един
4- Затворете курсора
5- Де-разпределяне на курсора
Срещаме се в различни ситуации, в които можем да използваме курсори. По-долу са дадени примери, в които можем да използваме курсори
Примери:
1-- Прекъснете всички връзки от база данни на SQL Server
2-- Добавете нови колони като CreatedBy към всички таблици в база данни
3--Разрешаване/Деактивиране на всички тригери в база данни на SQL Server
4--Генериране на скриптове/Вземане на резервно копие на цялата база данни на SQL Server един след един
5 --Отрежете/Изтрийте всички таблици от база данни на SQL Server
Примерен код:
Кодът по-долу може да се използва за унищожаване на всички процеси в база данни. Не можем да преименуваме база данни, ако някой процес осъществява достъп до базата данни. За да преименуваме, трябва да убием всички процеси, преди да преименуваме базата данни в 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