Динамичните курсори са с възможност за актуализиране. Динамичният курсор ще извлече промените (вмъкване, актуализиране или изтриване) при всяко извличане, докато курсорът е отворен, ако се случи някаква модификация на оригиналните данни в таблица/и. Този тип курсор е полезен, когато искаме да извлечем записите от оригинални таблици/и, докато курсорът е отворен и все още сме в процес на модификация на данни или вмъкване на нови записи и искаме да ги включим в набора от резултати на курсора, за да извършим операция.
Динамичните курсори са с възможност за превъртане (първи, последен, предишен, следващ, относителен), но абсолютни опцията не работи с динамични курсори.
Скрипт за динамичен курсор в SQL Server, използван и във видеото.
--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
Моля, гледайте видеоклипа за подробна демонстрация на динамични курсори в SQL Server.