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

Các loại con trỏ máy chủ SQL - Sự khác biệt giữa con trỏ địa phương và toàn cầu là gì | Hướng dẫn sử dụng SQL Server / TSQL

Con trỏ cục bộ:

Phạm vi của Con trỏ cục bộ được giới hạn trong lô, thủ tục được lưu trữ hoặc trình kích hoạt mà nó được tạo. Sau khi hoàn thành Batch, Stored Procedure hoặc Trigger. Con trỏ cục bộ sẽ không còn khả dụng để sử dụng nữa.

NHÀ GIÁM SÁT TOÀN CẦU:

Phạm vi của Con trỏ TOÀN CẦU được giới hạn trong kết nối mà nó được tạo. Bạn có thể sử dụng GLOBAL CURSOR trong nhiều đợt, bạn có thể mở trước và tìm nạp dữ liệu sau. Bạn cũng có thể mở GLOBAL CURSOR trong một Quy trình được Lưu trữ và Tìm nạp Dữ liệu trong Quy trình Lưu trữ Tiếp theo miễn là chúng đang sử dụng cùng một kết nối.
Nếu bạn không sử dụng từ khóa Local hoặc Global, Con trỏ sẽ được tạo bằng KIỂU bằng cách sử dụng Cài đặt cơ sở dữ liệu như được hiển thị bên dưới.
Hình 1:Sự khác biệt giữa Con trỏ cục bộ và Con trỏ chung trong SQL Server
Hãy tạo một bảng mẫu và chèn một số bản ghi và thực hiện một số thử nghiệm để chứng minh định nghĩa trên của chúng tôi.

 --drop table dbo.CustomerCreate table dbo.Customer (CustomerId Int, CustomerName VARCHAR (100), StreetAddress VARCHAr (100), City VARCHAR (100), State CHAR (2)) - Chèn một vài Bản ghi trong Bảng mẫu Chèn vào dbo.CustomerSelect 1, 'Aamir shahzad', 'Test Street Address', 'Charlotte', 'NC' Kết hợp tất cả Chọn 2, 'M Raza', 'Địa chỉ đường thử nghiệm', 'Charlotte', 'NC'union all Chọn 3,' John Smith ',' Địa chỉ đường thử nghiệm ',' Thành phố New York ',' NY'union Tất cả Chọn 4, 'Christy Richard', 'Địa chỉ đường thử nghiệm', 'Rio Rancho', 'NM' - Thử nghiệm với Con trỏ TOÀN CẦU trong Nhiều Lô. sử dụng TestgoDECLARE Customer_Cursor CURSOR - sử dụng LOCAL HOẶC TOÀN CẦU HEREGLOBAL FORSelect CustomerID, CustomerName, StreetAddress, City, Statefrom dbo.CustomerOPEN Customer_Cursor; GO - Chấm dứt hàng loạt và thay đổi sử dụng Cơ sở dữ liệu TestDBgoFETCH TIẾP THEO BẮT ĐẦU TÌM HIỂU TIẾP THEO TỪ Customer_Cursor ENDCLOSE Customer_Cursor; GODEALLOCATE Customer_Cursor; GOWe sẽ có thể xem các bản ghi vì chúng tôi đã định nghĩa Con trỏ là TOÀN CẦU và nó sẽ là 
 khả dụng trong toàn bộ Kết nối, ngay cả khi chúng tôi đã kết thúc Đợt đầu tiên bằng cách sử dụng GO 
câu lệnh
. 
  Hình 2:Con trỏ chung trong SQL Server - Kiểm tra với con trỏ LOCAL trong nhiều lô. sử dụng TestgoDECLARE Customer_Cursor CURSOR - sử dụng HERELOCAL ĐỊA PHƯƠNG HOẶC TOÀN CẦU để chọn CustomerID, CustomerName, StreetAddress, City, Statefrom dbo.CustomerOPEN Customer_Cursor; GO - Chấm dứt Lô và thay đổi Cơ sở dữ liệu sử dụng TestDBgoFETCH TIẾP THEO BẮT ĐẦU TÌM HIỂU TIẾP THEO TỪ KHÁCH HÀNG_Cursor KẾT THÚCCLOSE Customer_Cursor; GODEALLOCATE Khách hàng_Cursor; ĐI 
 
 
 Vì phạm vi của Con trỏ LOCAL được giới hạn ở Hàng loạt, Thủ tục được Lưu trữ hoặc Trình kích hoạt, Lô thứ hai không thể nhìn thấy Con trỏ vì chúng tôi đã xác định loại Con trỏ ĐỊA PHƯƠNG trong truy vấn ở trên của chúng tôi 
Hình 3:Con trỏ cục bộ trong SQL Server
 


Bây giờ chúng ta hãy thực hiện kiểm tra với Thủ tục được lưu trữ và xem cách con trỏ cục bộ và con trỏ toàn cầu hoạt động như thế nào trong Thủ tục được lưu trữ trong SQL Server.

- Kiểm tra với con trỏ địa phương trong nhiều lô. sử dụng Thủ tục TestgoCreate Dec_Cursor_Customer ASBEGINDECLARE Customer_Cursor CURSOR - sử dụng LOCAL HOẶC TOÀN CẦU HEREGLOBAL ĐỂ CHỌN CustomerID, CustomerName, StreetAddress, City, Statefrom dbo.CustomerOPEN Customer_Cursor; ENDGOCreate Thủ tục Fetch_Cursor@Customer_EGIN FEXT_GOCor @ Fetch_Cursor@Customer ENDEND - Thực hiện các quy trình đối với những gì chúng tôi nhận được với Loại con trỏ TOÀN CẦU và ĐỊA PHƯƠNGEXEC Dec_Cursor_CustomerGOEXEC Fetch_Cusor_CustomerCLOSE Customer_Cursor; GODEALLOCATE Customer_Cursor; GO
 
 

Nếu chúng ta thực hiện Thủ tục được lưu trữ ở trên, chúng ta sẽ nhận được kết quả như trong Hình 2. Vì chúng ta đã khai báo là kiểu GLOBAL, chúng ta sẽ có thể sử dụng nó trong nhiều Thủ tục được lưu trữ miễn là bạn chạy chúng trong cùng một kết nối.

Hãy tiếp tục và thay đổi thủ tục đã lưu trữ và thay đổi kiểu từ GLOBAL thành cục bộ rồi thực hiện các thủ tục. Ngay cả khi chúng ta đang ở trong cùng một kết nối, Chúng ta sẽ gặp lỗi như chúng ta đã gặp trong Hình 3. Vì phạm vi của Con trỏ được giới hạn ở Batch, Stored Procedure hoặc Trigger khi bạn xác định là LOCAL.
Video Demo:Để xem Demo chi tiết cách hoạt động của Local Cursor và Global Cursor, hãy xem video.
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thứ tự hàng mặc định trong truy vấn CHỌN - SQL Server 2008 so với SQL 2012

  2. Nhận danh sách tất cả các cột rỗng và không rỗng trong cơ sở dữ liệu SQL Server - Hướng dẫn SQL Server / T-SQL Phần 53

  3. Đặt giá trị bắt đầu cho cột với tự động tăng

  4. Trả về thông tin cột cho một thủ tục được lưu trữ trong SQL Server:sp_sproc_columns

  5. Cách đặt tên bảng trong truy vấn SQL động?