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 OUTPUT
parameter. (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_variable
atau #temp_table
?
sql-server
sql-server-2008
performance
Sreekumar P
sumber
sumber
Jawaban:
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.
sumber
Tidak ada yang lebih baik daripada mencoba keduanya, tetapi saya menemukan #tempTables berkinerja lebih baik setelah Anda masuk ke ratusan catatan.
sumber