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

Có cách nào để lặp qua biến bảng trong TSQL mà không sử dụng con trỏ không?

Trước hết, bạn nên chắc chắn rằng bạn cần phải lặp lại qua từng hàng - các hoạt động dựa trên tập hợp sẽ hoạt động nhanh hơn trong mọi trường hợp mà tôi có thể nghĩ đến và thường sẽ sử dụng mã đơn giản hơn.

Tùy thuộc vào dữ liệu của bạn, có thể lặp lại chỉ bằng cách sử dụng SELECT các câu lệnh như được hiển thị bên dưới:

Declare @Id int

While (Select Count(*) From ATable Where Processed = 0) > 0
Begin
    Select Top 1 @Id = Id From ATable Where Processed = 0

    --Do some processing here

    Update ATable Set Processed = 1 Where Id = @Id 

End

Một giải pháp thay thế khác là sử dụng bảng tạm thời:

Select *
Into   #Temp
From   ATable

Declare @Id int

While (Select Count(*) From #Temp) > 0
Begin

    Select Top 1 @Id = Id From #Temp

    --Do some processing here

    Delete #Temp Where Id = @Id

End

Tùy chọn bạn nên chọn thực sự phụ thuộc vào cấu trúc và khối lượng dữ liệu của bạn.

Lưu ý: Nếu bạn đang sử dụng SQL Server, bạn sẽ được phục vụ tốt hơn bằng cách sử dụng:

WHILE EXISTS(SELECT * FROM #Temp)

Sử dụng COUNT sẽ phải chạm vào từng hàng trong bảng, EXISTS chỉ cần chạm vào cái đầu tiên (xem câu trả lời của Josef bên dưới).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server:Trích xuất siêu dữ liệu bảng (mô tả, trường và kiểu dữ liệu của chúng)

  2. 3 cách lấy tên ngày từ ngày trong SQL Server (T-SQL)

  3. Giải phẫu các bế tắc của SQL Server và cách tốt nhất để tránh chúng

  4. Chọn giá trị từ trường XML trong SQL Server 2008

  5. Cách tạo khóa ngoại trong SQL Server (Ví dụ T-SQL)