sql >> Database >  >> RDS >> Sqlserver

Typen SQL Server-cursor - Dynamische cursor | SQL Server-zelfstudie / TSQL-zelfstudie

Cursors zijn de objecten waarmee we de gegevens rij voor rij uit de resultatenset kunnen openen.

Dynamische cursors kunnen worden bijgewerkt. De dynamische cursor zal de wijzigingen (invoegen, bijwerken of verwijderen) bij elke ophaalactie ophalen terwijl de cursor open is als er een wijziging is opgetreden in de originele gegevens in tabel(len). Dit type cursor is handig wanneer we de records uit de originele tabel(len) willen extraheren terwijl de cursor open is en we nog bezig zijn met het wijzigen van gegevens of het invoegen van nieuwe records en deze willen opnemen in de cursorresultatenset om een ​​bewerking uit te voeren.

Dynamische cursors zijn scrollbaar (First,Last,Prior,Next,Relative) maar absoluut optie werkt niet met dynamische cursors.

Script voor dynamische cursor in SQL Server dat ook in de video wordt gebruikt.


--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
 
Bekijk de video voor een gedetailleerde demo van dynamische cursors in SQL Server.
  1. Een gids voor MySQL Galera Cluster-streamingreplicatie:deel één

  2. Werken met MySQL-database-engines

  3. Update SQL met opeenvolgende nummering

  4. Hoe de grootte van de tabellen van een MySQL-database te krijgen?