@table_variable atau #temp_table

11

Saya memiliki variabel tipe tabel yang didefinisikan pengguna besar yang memiliki 129 kolom. Saya akan menyimpan sekitar 2000-3000 catatan dalam variabel tabel ini sekaligus dan meneruskannya ke berbagai prosedur dan fungsi tersimpan untuk mendapatkan data tambahan dan membuat modifikasi. Data tambahan ini dan modifikasi baru kemudian akan disimpan dalam variabel tabel baru dari jenis yang sama dan dikembalikan ke prosedur yang tersimpan sumber melalui OUTPUTparameter. (Ini karena parameter tipe tabel hanya bisa dilewatkan sebagai READONLY.)

Ini adalah pseudo-code saya:

  SP1
  @tmp tableType
  {
        INSERT @tmp EXEC
        SP2 (@tmp)

        INSERT @tmp EXEC
        SP3 (@tmp)
  }

Haruskah saya menggunakan @table_variableatau #temp_table?

Sreekumar P
sumber

Jawaban:

12

Ada dua blog yang harus Anda perhatikan. Yang pertama (di sini ) adalah perbandingan Tabel Variabel dan Tabel Temp. Itu dari 2008 dan tetap relevan untuk SQL Server 2008 R2.

Entri blog kedua (di sini ) membahas beberapa kesalahpahaman (konsep yang terlewatkan) mengenai Variabel Tabel; termasuk mengindeks Variabel Tabel.

Kedua entri blog ini, artikel, ditulis oleh Gail Shaw.

Saya percaya satu item mengatakan yang Anda cari adalah Variabel Tabel mungkin tidak diteruskan antara prosedur yang tersimpan sementara Tabel Temp dapat diteruskan antara prosedur yang tersimpan. Variabel Tabel terdekat yang terjadi ketika melewati antara prosedur yang tersimpan adalah sebagai Tipe Tabel yang Ditentukan Pengguna.

Melewati Tabel Variabel sebagai TVP ke prosedur tersimpan memiliki persyaratan itu harus didefinisikan sebagai parameter BACA-HANYA. Ini menyiratkan akan ada beberapa salinan dari Variabel Tabel jika Anda ingin mengembalikan salinannya yang dimodifikasi.

Semua mengatakan, melewati antara prosedur tersimpan mungkin lebih baik dilayani oleh Tabel Temp ketika Anda ingin mengembalikan struktur yang diteruskan dengan nilai yang diperbarui.

Robert Miller
sumber
5

Tidak ada yang lebih baik daripada mencoba keduanya, tetapi saya menemukan #tempTables berkinerja lebih baik setelah Anda masuk ke ratusan catatan.

SqlACID
sumber
3
Tambahkan ke fakta bahwa tabel temp dapat memiliki indeks, memiliki statistik, sedangkan variabel tabel hanya dapat memiliki PK. Anda memiliki beberapa detail di sini .
Marian