Aplikasi database dunia nyata perlu membuat beberapa permintaan dari ujung depan ke database untuk menjalankan semua jenis fungsi.
Jika sebuah aplikasi membutuhkan banyak data, seperti yang digunakan di bank atau bandara, dll, jumlah perjalanan data bisa sangat besar. Setiap permintaan ke database menggunakan bandwidth dan membutuhkan waktu untuk dieksekusi. Tanpa parameter bernilai tabel, aplikasi depan perlu melakukan beberapa perjalanan data untuk memanipulasi beberapa baris data. Namun, dengan parameter bernilai tabel, beberapa baris dapat disisipkan, diperbarui, dan dihapus dari database menggunakan perintah berparameter tunggal yang menggunakan parameter bernilai tabel.
Parameter bernilai tabel adalah parameter dengan tipe tabel. Dengan menggunakan parameter ini, Anda dapat mengirim beberapa baris data ke prosedur tersimpan atau perintah SQL berparameter dalam bentuk tabel. Transact-SQL dapat digunakan untuk mengakses nilai kolom dari parameter bernilai tabel.
Pada artikel ini, kita akan mempelajari bagaimana kita dapat melewatkan tabel data ke prosedur tersimpan. Namun, sebelum itu mari kita lihat bagaimana data tabular dulunya dilewatkan sebelum parameter bernilai tabel.
Melewati Data dalam Bentuk Tabular sebelum Parameter Bernilai Tabel
Parameter bernilai tabel diperkenalkan di SQL Server 2008. Sebelum itu, ada opsi terbatas untuk meneruskan data tabular ke prosedur tersimpan. Sebagian besar pengembang menggunakan salah satu metode berikut:
- Data dalam beberapa kolom dan baris direpresentasikan dalam bentuk serangkaian parameter. Namun, jumlah maksimum parameter yang dapat diteruskan ke prosedur tersimpan SQL Server adalah 2.100. Oleh karena itu, dalam kasus meja besar, metode ini tidak dapat digunakan. Selanjutnya diperlukan pra-pemrosesan di sisi server untuk memformat parameter individual ke dalam bentuk tabel.
- Buat beberapa pernyataan SQL yang dapat memengaruhi banyak baris, seperti UPDATE. Pernyataan dapat dikirim ke server secara individual atau dalam bentuk batch. Bahkan jika dikirim dalam bentuk batch, pernyataan dieksekusi secara individual di server.
- Cara lain adalah dengan menggunakan string atau dokumen XML yang dibatasi untuk menggabungkan data dari beberapa baris dan kolom dan kemudian meneruskan nilai teks ini ke pernyataan SQL berparameter atau prosedur tersimpan. Kelemahan dari pendekatan ini adalah Anda perlu memvalidasi struktur data untuk memisahkan nilai.
Meneruskan tabel Data sebagai Parameter ke Stored Procedures
Sekarang mari kita lihat bagaimana parameter bernilai tabel dapat digunakan untuk mengirim data ke prosedur tersimpan tanpa menghadapi masalah apa pun yang dibahas di bagian sebelumnya. Parameter bernilai tabel memungkinkan beberapa baris data untuk diteruskan ke prosedur tersimpan oleh beberapa kode Transact-SQL atau dari aplikasi front-end. Ukuran maksimum yang dapat dimiliki parameter bernilai tabel sama dengan ukuran memori maksimum server database.
Di bagian ini, kita akan menggunakan parameter bernilai tabel bersama dengan prosedur tersimpan untuk menyisipkan beberapa baris ke tabel data.
Melewati parameter bernilai tabel ke prosedur tersimpan adalah proses tiga langkah:
- Buat jenis tabel yang ditentukan pengguna yang sesuai dengan tabel yang ingin Anda isi.
- Meneruskan tabel yang ditentukan pengguna ke prosedur tersimpan sebagai parameter
- Di dalam prosedur tersimpan, pilih data dari parameter yang diteruskan dan masukkan ke dalam tabel yang ingin Anda isi.
Mari kita lihat contoh bagaimana kita dapat meneruskan tabel data ke prosedur tersimpan menggunakan fungsi bernilai tabel.
Pertama, buat tabel yang ingin kita isi. Jalankan script berikut:
CREATE DATABASE ShowRoom USE ShowRoom Create Table Cars ( Id int primary key, Name nvarchar(50), company nvarchar(50) ) Go
Pada script di atas, kita membuat database bernama ShowRoom dengan satu tabel yaitu Cars. Tabel Mobil memiliki tiga kolom:Id, Name, dan company. Kami akan menggunakan prosedur tersimpan untuk mengisi tabel Mobil.
Seperti yang dijelaskan sebelumnya, langkah pertama adalah membuat tipe tabel yang ditentukan pengguna yang sesuai dengan tabel yang ingin Anda isi. Jalankan skrip berikut untuk melakukannya:
CREATE TYPE CarTableType AS TABLE ( Id int primary key, Name nvarchar(50), company nvarchar(50) ) Go
Dalam skrip di atas, kami membuat variabel yang ditentukan pengguna CarTableType dari tipe Tabel. Ini adalah variabel yang akan kita berikan ke prosedur tersimpan. Terlihat bahwa kolom variabel CarTableType mirip dengan yang ada di tabel Cars.
Sekarang mari kita buat prosedur tersimpan yang menerima variabel CarTableType sebagai parameter. Di dalam stored procedure, kita akan PILIH semua record dari variabel ini dan memasukkannya ke dalam tabel Cars. Jalankan skrip berikut untuk membuat prosedur tersimpan seperti itu:
CREATE PROCEDURE spInsertCars @CarType CarTableType READONLY AS BEGIN INSERT INTO Cars SELECT * FROM @CarType END
Dalam skrip di atas, kami membuat prosedur tersimpan spInsertCars. Penting untuk disebutkan bahwa Anda harus menentukan parameter yang ditentukan pengguna sebagai READONLY di dalam prosedur tersimpan, jika tidak melakukannya akan mengakibatkan kesalahan runtime.
Anda dapat melihat bahwa prosedur tersimpan spInsertCars menerima parameter CarTableType dan menetapkannya ke variabel @CarType dari jenis CarTableType.
Langkah terakhir adalah membuat variabel dari variabel CarTableType, mengisinya dengan data dummy dan meneruskannya ke prosedur tersimpan spInsertCars. Perhatikan script berikut:
DECLARE @CarTableType CarTableType INSERT INTO @CarTableType VALUES (1, 'Corrolla', 'Toyota') INSERT INTO @CarTableType VALUES (2, 'Civic', 'Honda') INSERT INTO @CarTableType VALUES (3, '6', 'Audi') INSERT INTO @CarTableType VALUES (4, 'c100', 'Mercedez') INSERT INTO @CarTableType VALUES (5, 'Mustang', 'Ford') EXECUTE spInsertCars @CarTableType
Pada script di atas, pertama kita mendeklarasikan variabel @CarTableType dengan tipe CarTableType. Kami kemudian memasukkan 5 catatan dummy ke dalam variabel ini. Terakhir, kami menjalankan prosedur tersimpan spInsertCars dan meneruskannya ke variabel @CarTableType sebagai parameter.
Di dalam stored procedure, lima record dari variabel @CarTableType dipilih dan dimasukkan ke dalam tabel Cars. Sekarang jika Anda memilih semua catatan dari tabel Mobil, Anda akan melihat catatan yang baru dimasukkan. Jalankan skrip berikut untuk melakukannya:
SELECT * FROM Cars
Output dari script di atas terlihat seperti ini:
Terlihat dari output bahwa semua record dari variabel @CarTableType telah dimasukkan ke dalam tabel Cars.