Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Các loại con trỏ máy chủ SQL - Con trỏ KEYSET | Hướng dẫn sử dụng SQL Server / TSQL

Khi chúng ta mở Keyset Cursor, thành viên và thứ tự của các hàng trong con trỏ được cố định. KeySet Cursor tạo một bảng tạm thời trong TempDB với các giá trị được xây dựng độc đáo từ các cột mà chúng tôi sử dụng trong câu lệnh Select.

Dưới đây là những điểm quan trọng cần nhớ về KEYSET Cursor trong SQL Server


  • Nếu truy vấn Chọn của bạn đang sử dụng bất kỳ bảng nào không có Chỉ mục duy nhất, thì con trỏ KEYSET sẽ đơn giản được chuyển đổi thành Con trỏ tĩnh. Đảm bảo rằng tất cả các bảng bạn đang sử dụng trong Truy vấn Chọn đều có chỉ mục duy nhất. Điều này rất quan trọng vì Con trỏ KEYSET xây dựng số nhận dạng duy nhất cho các hàng bằng cách sử dụng các giá trị duy nhất này.
  • Nếu chúng tôi chèn các hàng trong / s bảng nguồn khi con trỏ đang mở. Các Phụ trang đó sẽ không hiển thị trong con trỏ đã mở.
  • Nếu chúng tôi cập nhật các giá trị không phải khóa trong bảng cơ sở, những thay đổi đó sẽ hiển thị trong con trỏ.
  • Nếu bạn cập nhật giá trị cột Khoá trong / s Bảng Cơ sở khi con trỏ được mở và sau đó cố gắng tìm nạp giá trị. @@ FETCH_STATUS sẽ trả lại bạn -2. Cập nhật được thực hiện bên trong con trỏ cho Cột khóa với mệnh đề WHERE CURRENT OF sẽ hiển thị ở cuối Con trỏ.
  • Nếu bạn xóa hàng khỏi / s Bảng cơ sở trong khi con trỏ đang mở và sau đó cố gắng tìm nạp hàng đó trong con trỏ, @@ FETCH_STATUS sẽ trả về -2.
  • Con trỏ KEYSET có thể cuộn được.
Thật khó để đặt các ảnh chụp nhanh cùng với tất cả các chi tiết ở đây. Tôi khuyên bạn nên xem video để biết cách các tùy chọn KEYSET hoạt động trong thực tế.

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
 


Video Demo:Con trỏ KEYSET trong SQL Server là gì và Cách hoạt động của Con trỏ 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. Cách thêm HOẶC Thả cột từ bảng đã bật CDC mà không làm mất dữ liệu trong cơ sở dữ liệu SQL Server - Hướng dẫn sử dụng SQL Server

  2. COT () Ví dụ trong SQL Server

  3. Làm cách nào để lấy ngày ở định dạng YYYY-MM-DD từ trường ngày giờ TSQL?

  4. Nhiều chỉ mục so với nhiều cột

  5. Tổng hợp bitwise HOẶC trong một truy vấn con