Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Jenis Kursor SQL Server - Kursor KEYSET | Tutorial SQL Server / Tutorial TSQL

Saat kita membuka Kursor Keyset, keanggotaan dan urutan baris di kursor tetap. KeySet Cursor membuat tabel temp di TempDB dengan nilai yang dibangun secara unik dari kolom yang kita gunakan dalam pernyataan Select.

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.
Sulit untuk menyatukan snapshot dengan semua detail di sini. Saya sarankan Anda menonton video untuk melihat bagaimana opsi KEYSET bekerja secara nyata.

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Mengganti Nilai Null dengan Tidak Diketahui dalam Pernyataan Pilihan di SQL Server - Tutorial SQL Server / TSQL Bagian 111

  2. Perubahan penting untuk Acara yang Diperpanjang di SQL Server 2012

  3. SQL Server Resumable Index:Apakah ini baik untuk Anda?

  4. Mengapa Anda membuat Tampilan dalam database?

  5. Kesalahan MSSQL 'Penyedia yang mendasari gagal saat Buka'