sql >> Base de Datos >  >> RDS >> Sqlserver

Definir los pasos para el cursor de SQL Server - Tutorial de SQL Server / TSQL

Los cursores son objetos que nos proporciona SQL Server para realizar operaciones fila por fila.

Estos son los pasos para escribir un cursor

1-Declarar un cursor por usando el nombre del Cursor con una declaración Select
2- Abrir el Cursor para completar con la salida de la declaración Select
3- Buscar las filas para procesarlas una tras otra
4- Cerrar el Cursor
5- Desasignar cursor

Nos encontramos con diferentes situaciones en las que podemos utilizar cursores. A continuación se muestran algunos ejemplos en los que podemos usar cursores

Ejemplos:
1-- Elimine todas las conexiones de una base de datos de SQL Server
2-- Agregue una columna nueva como Creado por a todas las tablas en una base de datos
3--Habilitar/Deshabilitar todos los activadores en una base de datos de SQL Server
4--Generar secuencias de comandos/Realizar copias de seguridad de todas las bases de datos en SQL Server una tras otra
5 --Truncar/Eliminar todas las tablas de una base de datos de SQL Server


Código de ejemplo:
El siguiente código se puede usar para eliminar todos los procesos de una base de datos. No podemos cambiar el nombre de una base de datos si algún proceso está accediendo a la base de datos. Para cambiar el nombre, tenemos que eliminar todos los procesos antes de cambiar el nombre de la base de datos en 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