Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Definir as etapas para o cursor do SQL Server - Tutorial do SQL Server / TSQL

Cursores são objetos que nos são fornecidos no SQL Server para realizar operações linha por linha.

Aqui estão as etapas de como você escreve um cursor

1-Declare A Cursor by usando o nome do cursor com uma instrução Select
2- Abra o cursor para preencher com a saída da instrução Select
3- Busque as linhas para processá-las uma após uma
4- Feche o cursor
5- Desalocar Cursor

Encontramos diferentes situações em que podemos usar cursores. Abaixo estão alguns exemplos em que podemos usar cursores

Exemplos:
1-- Mate todas as conexões de um banco de dados SQL Server
2-- Adicione novas colunas como CreatedBy para todas as tabelas em um banco de dados
3--habilitar/desabilitar todos os gatilhos em um banco de dados SQL Server
4--gerar scripts/fazer backup de todos os bancos de dados no SQL Server um após um
5 --Truncate/Delete todas as tabelas de um banco de dados SQL Server


Exemplo de código:
O código abaixo pode ser usado para matar todos os processos em um banco de dados. Não podemos renomear um banco de dados se algum processo estiver acessando o banco de dados. Para renomear temos que matar todos os processos antes de renomear o banco de dados no 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