Berikut adalah poin penting yang perlu diingat tentang KEYSET Cursor di SQL Server
- Jika kueri Pilih Anda menggunakan tabel apa pun tanpa Indeks Unik, kursor KEYSET hanya akan dikonversi ke Kursor Statis. Pastikan semua tabel yang Anda gunakan di Select Query memiliki indeks unik. Ini penting karena KEYSET Cursor membuat pengidentifikasi unik untuk baris dengan menggunakan nilai unik ini.
- Jika kita menyisipkan baris dalam tabel sumber setelah kursor terbuka. Sisipan tersebut tidak akan terlihat di kursor yang sudah dibuka.
- Jika kita memperbarui nilai bukan kunci di tabel dasar, perubahan itu akan terlihat di kursor.
- Jika Anda memperbarui nilai kolom Kunci di Tabel Dasar saat kursor dibuka, lalu coba ambil nilainya. @@FETCH_STATUS akan mengembalikan Anda -2. Pembaruan yang dibuat di dalam kursor ke Kolom Kunci dengan klausa WHERE CURRENT OF akan terlihat di akhir Kursor.
- Jika Anda menghapus baris dari Tabel Dasar saat kursor terbuka dan kemudian mencoba mengambil baris tersebut dalam kursor, @@FETCH_STATUS akan mengembalikan -2.
- kursor KEYSET dapat digulir.
Create table dbo.Customer ( CustomerId Int , CustomerName VARCHAR(100), StreetAddress VARCHAr(100), City VARCHAR(100), State CHAR(2)) go --Create Unique Index on CustomerID CREATE UNIQUE INDEX UQ_CustomerID ON dbo.Customer (CustomerID); --Insert few Records in Sample Table Insert into dbo.Customer Select 1,'Aamir shahzad','Test Street Address','Charlotte','NC' Union all Select 2,'M Raza','Test Street Address','Charlotte','NC' union all Select 3,'John Smith','Test Street Address','New York City','NY' union All Select 4,'Christy Richard','Test Street Address','Rio Rancho','NM' --Insert NEW Record Insert into dbo.Customer Select 5,'Robert Ladson','Pathway Street Address','High Point','NC' --Delete Records Delete from dbo.Customer Where CustomerID in (3,4) --Update All Record for NONKEY Column Update dbo.Customer set CustomerName='NO NAME' --Update Key Column value Update dbo.customer set CustomerID=9 where Customerid=3 --KEYSET 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 KEYSET 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' --You can use CONCAT Function in SQL 2012 AND Latest for Contatenation of Integters and Strings --PRINT CONCAT(@CustomerID,' ',@CustomerNAme,' ',@StreetAddress,' ',@City,' ',@State) Print CAST(@CustomerID AS VARCHAR(10))+' '+@CustomerNAme+' '+@StreetAddress+' '+@City+' '+@State FETCH NEXT FROM CUR INTO @CustomerID,@CustomerNAme,@StreetAddress,@City,@State Print @@FETCH_STATUS END CLOSE CUR DEALLOCATE CUR
Demo Video:Apa itu Kursor KEYSET di SQL Server dan Cara Kerja Kursor KEYSET