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

Iterasi melalui baris di SQL Server 2008

Jika Anda harus iterate(*), gunakan konstruksi yang dirancang untuk melakukannya - kursor . Banyak difitnah, tetapi jika itu paling jelas mengungkapkan niat Anda, saya katakan gunakan itu:

DECLARE @ID int
DECLARE IDs CURSOR LOCAL FOR select ID from SAMPLE where Name = @NameParameter

OPEN IDs
FETCH NEXT FROM IDs into @ID
WHILE @@FETCH_STATUS = 0
BEGIN
    exec myproc @ID

    FETCH NEXT FROM IDs into @ID
END

CLOSE IDs
DEALLOCATE IDs

(*) Jawaban ini telah menerima beberapa upvotes baru-baru ini, tetapi saya merasa saya harus memasukkan komentar asli saya di sini juga, dan menambahkan beberapa saran umum:

Dalam SQL, Anda harus umumnya mencari solusi berbasis himpunan. Seluruh bahasa berorientasi pada solusi berbasis set, dan (pada gilirannya) pengoptimal berorientasi pada membuat solusi berbasis set bekerja dengan baik. Selanjutnya, alat yang kami miliki untuk penyetelan pengoptimal juga berorientasi pada set - mis. menerapkan indeks ke tabel.

Ada beberapa situasi di mana iterasi adalah pendekatan terbaik. Ini hanya sedikit, dan dapat disamakan dengan aturan Jackson tentang pengoptimalan - jangan lakukan itu - dan (hanya untuk pakar) jangan lakukan belum .

Anda jauh lebih baik dilayani untuk pertama-tama mencoba merumuskan apa yang Anda inginkan dalam hal kumpulan semua baris yang akan terpengaruh - apa perubahan keseluruhan yang ingin dicapai? - lalu coba rumuskan kueri yang merangkum tujuan tersebut. Hanya jika kueri yang dihasilkan dengan melakukannya tidak berkinerja memadai (atau ada beberapa komponen lain yang tidak dapat melakukan apa pun selain menangani setiap baris satu per satu) Anda harus mempertimbangkan iterasi.



  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 mengembalikan hanya Tanggal dari tipe data DateTime SQL Server

  2. Pertanyaan tentang kinerja SQL Server HierarchyID depth-first

  3. Bagaimana cara mendekripsi kata sandi dari SQL server?

  4. Nonaktifkan semua indeks yang tidak berkerumun

  5. Memperkenalkan Fitur Baru - Laporan Pertumbuhan Database Cloud Spotlight