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

Tipos de cursor de SQL Server - Cursor dinámico | Tutorial de SQL Server / Tutorial de TSQL

Los cursores son los objetos que nos permiten acceder a los datos fila por fila del conjunto de resultados.

Los cursores dinámicos se pueden actualizar. El cursor dinámico recuperará los cambios (insertar, actualizar o eliminar) en cada recuperación mientras el cursor está abierto si se produjo alguna modificación en los datos originales de la tabla o tablas. Este tipo de Cursor es útil cuando queremos extraer los registros de la(s) tabla(s) original(es) mientras el cursor está abierto y todavía estamos en proceso de modificación de datos o insertando nuevos registros y queremos incluirlos en el conjunto de resultados del cursor para realizar la operación.

Los cursores dinámicos son desplazables (primero, último, anterior, siguiente, relativo) pero absoluto La opción no funciona con cursores dinámicos.

La secuencia de comandos para el cursor dinámico en SQL Server también se usa en el video.


--drop table dbo.Customer
Create table dbo.Customer ( 
CustomerId Int Identity(1,1),
CustomerName VARCHAR(100),
StreetAddress VARCHAr(100),
City VARCHAR(100),
State CHAR(2))
go

--Insert couple of Records in Sample Table
Insert into dbo.Customer
Select 'Aamir shahzad','Test Street Address','Charlotte','NC'
Union 
Select 'M Raza','Test Street Address','Charlotte','NC'

Select * from dbo.Customer

--Insert NEW Record
Insert into dbo.Customer
Select 'John Smith','Test Street Address','New York City','NY'

--Delete Records
Delete from dbo.Customer
Where CustomerName in ('Aamir Shahzad','M Raza')

--Update All Record
Update dbo.Customer
set CustomerName='NO NAME'




--Cursor Script

Declare @CustomerID INT
Declare @CustomerNAme VARCHAR (100)
DECLARE @StreetAddress VARCHAR(100)
DECLARE @City VARCHAR(100)
DECLARE @State CHAR(2)

--DECLARE A CURSOR
DECLARE CUR CURSOR
DYNAMIC
FOR
Select CustomerID,CustomerName,StreetAddress,City,State from dbo.Customer

--OPEN CURSOR
OPEN CUR
Print 'CURSOR IS OPEN'
--FETCH NEXT RECORD
FETCH NEXT FROM CUR INTO @CustomerID,@CustomerNAme,@StreetAddress,@City,@State
WHILE @@FETCH_STATUS=0
BEGIN 
RAISERROR ('',0,1) WITH NOWAIT
WAITFOR DELAY '00:00:15'
PRINT CONCAT(@CustomerID,' ',@CustomerNAme,' ',@StreetAddress,' ',@City,' ',@State)
FETCH NEXT FROM CUR INTO @CustomerID,@CustomerNAme,@StreetAddress,@City,@State

END
CLOSE CUR
DEALLOCATE CUR
 
Mire el video para obtener una demostración detallada de los cursores dinámicos en SQL Server.