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

Làm cách nào để thực hiện một thủ tục được lưu trữ một lần cho mỗi hàng được trả về bởi truy vấn?

sử dụng con trỏ

ADDENDUM:[Ví dụ về con trỏ MS SQL]

declare @field1 int
declare @field2 int
declare cur CURSOR LOCAL for
    select field1, field2 from sometable where someotherfield is null

open cur

fetch next from cur into @field1, @field2

while @@FETCH_STATUS = 0 BEGIN

    --execute your sproc on each row
    exec uspYourSproc @field1, @field2

    fetch next from cur into @field1, @field2
END

close cur
deallocate cur

trong MS SQL, đây là một bài viết ví dụ

lưu ý rằng con trỏ chậm hơn các hoạt động dựa trên tập hợp, nhưng nhanh hơn các vòng lặp while thủ công; chi tiết hơn trong câu hỏi SO này

ADDENDUM 2:nếu bạn sẽ xử lý nhiều hơn chỉ một vài bản ghi, trước tiên hãy kéo chúng vào bảng tạm thời và chạy con trỏ qua bảng tạm thời; điều này sẽ ngăn SQL leo thang thành bảng khóa và tăng tốc hoạt động

ADDENDUM 3:và tất nhiên, nếu bạn có thể nội tuyến bất kỳ thủ tục nào được lưu trữ của bạn đang thực hiện với mỗi ID người dùng và chạy toàn bộ nội dung dưới dạng một câu lệnh cập nhật SQL duy nhất, điều đó sẽ là tối ưu



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tạo cột được tính toán bằng cách sử dụng dữ liệu từ một bảng khác

  2. Các loại con trỏ máy chủ SQL - Con trỏ tĩnh trong SQL Server là gì | Hướng dẫn sử dụng SQL Server / TSQL

  3. Các kỹ thuật tối ưu hóa truy vấn trong SQL Server:5 phương pháp hay nhất để tăng hiệu suất truy vấn

  4. SQL Server 2017 Backup -2

  5. Tạo chế độ xem với mệnh đề ORDER BY