Prosedur tersimpan adalah sekelompok pernyataan SQL yang dikompilasi menjadi satu. Prosedur tersimpan dapat mencakup logika bisnis dan konstruksi pemrograman lainnya.
Di SQL Server, prosedur tersimpan adalah grup dari satu atau lebih pernyataan Transact-SQL atau referensi ke metode bahasa runtime umum (CLR) Microsoft .NET Framework.
Kemampuan Program
Tetapi prosedur tersimpan lebih dari sekadar skrip yang panjang. Ini adalah skrip yang telah disimpan di SQL Server secara khusus di bawah Stored Procedures simpul, dan dapat:
- Terima parameter masukan (dan kembalikan beberapa nilai dalam bentuk parameter keluaran ke program pemanggil).
- Berisi pernyataan pemrograman.
- Mengembalikan nilai status ke program panggilan untuk menunjukkan keberhasilan atau kegagalan, dan alasan kegagalan apa pun.
Prosedur tersimpan sering mengandung logika bisnis. Misalnya, prosedur tersimpan dapat menerima parameter yang diteruskan ke sana dan menguji parameter tersebut menggunakan IF
pernyataan. Misalnya, jika parameternya adalah satu nilai, lakukan ini, jika itu nilai lain, lakukan itu.
Prosedur tersimpan dapat meningkatkan kinerja dalam aplikasi, karena prosedur tersimpan diuraikan dan dioptimalkan segera setelah dibuat, lalu disimpan dalam memori. Menjalankan kueri bersyarat melalui prosedur tersimpan bisa sangat cepat - dibandingkan dengan aplikasi yang mengirimkan kueri melalui jaringan, ke SQL Server, kemudian mengembalikan semua data ke dalamnya melalui jaringan sehingga dapat menyaringnya, dan memilih hanya catatan yang diminatinya.
Manfaat Prosedur Tersimpan
Berikut adalah beberapa manfaat utama dalam menggunakan prosedur tersimpan:
Manfaat | Penjelasan |
---|---|
Pemrograman Modular | Anda dapat menulis prosedur tersimpan sekali, lalu memanggilnya lagi dan lagi, dari berbagai bagian aplikasi (dan bahkan dari beberapa aplikasi). |
Kinerja | Prosedur tersimpan memberikan eksekusi kode yang lebih cepat dan mengurangi lalu lintas jaringan.
|
Keamanan | Pengguna dapat menjalankan prosedur tersimpan tanpa perlu mengeksekusi pernyataan apa pun secara langsung. Oleh karena itu, prosedur tersimpan dapat menyediakan fungsionalitas database tingkat lanjut untuk pengguna yang biasanya tidak memiliki akses ke tugas ini, tetapi fungsi ini tersedia dengan cara yang dikontrol dengan ketat. |
Cara Membuat Prosedur Tersimpan
Untuk membuat prosedur tersimpan, gunakan CREATE PROCEDURE
pernyataan, diikuti oleh kode yang membentuk prosedur tersimpan. Jika prosedur tersimpan Anda akan menerima parameter, parameter tersebut harus disertakan setelah nama.
CREATE PROCEDURE myStoredProcedure AS ... OR CREATE PROCEDURE myStoredProcedure @ParameterName DataType AS ...
Sekarang kita akan membuat prosedur tersimpan berdasarkan salah satu tampilan yang kita buat sebelumnya — RecentAlbums lihat.
Tampilan ini mengembalikan semua album yang dirilis dalam 20 tahun terakhir. Ini baik-baik saja selama itu hanya perlu melihat ke belakang 20 tahun. Tetapi bagaimana jika Anda ingin pengguna memilih berapa tahun yang harus dicakup?
Prosedur tersimpan dapat mengatasi masalah ini.
Kami akan membuat prosedur tersimpan yang menerima parameter. Nilai parameter akan menjadi jumlah tahun untuk mencari kembali. Oleh karena itu, nilai ini dapat ditentukan oleh pengguna setiap kali mereka menjalankan prosedur tersimpan.
-
Desain Prosedur Tersimpan
Buka jendela kueri baru dan tambahkan kode untuk prosedur tersimpan.
Dalam kasus kami, kami akan menyalin/menempelkan kode dari RecentArtists melihat dan memodifikasi bagian atas, sehingga menjadi prosedur tersimpan.
Kami akan menambahkan parameter yang disebut
@Count
yang akan menentukan berapa tahun prosedur tersimpan harus melihat ke belakang.Jadi kami akan mengganti nilai hardcode dari
20
dengan@Count
Contoh Kode
Berikut kode dari contoh kita:
CREATE PROCEDURE spRecentAlbums @Count int AS SELECT Albums.ReleaseDate, Albums.AlbumName, Genres.Genre, Artists.ArtistName, Artists.ActiveFrom FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId INNER JOIN Genres ON Albums.GenreId = Genres.GenreId WHERE (Albums.ReleaseDate > DATEADD(year, - @Count, GETDATE()));
-
Buat Prosedur Tersimpan
Setelah semuanya terlihat bagus, Anda dapat menjalankan pernyataan untuk membuat prosedur tersimpan.
Klik Jalankan untuk membuat prosedur tersimpan.
Setelah prosedur tersimpan dibuat, Anda dapat melihatnya di Object Explorer (Anda mungkin perlu menyegarkan Prosedur Tersimpan simpul terlebih dahulu).
-
Jalankan Prosedur Tersimpan
Sekarang setelah dibuat, Anda dapat menjalankan prosedur tersimpan.
Buka jendela kueri baru, tambahkan ini:
EXEC spRecentAlbums @Count = 5;
Sekarang klik Jalankan dari bilah alat.
Prosedur tersimpan akan mengembalikan semua album yang dirilis dalam 5 tahun terakhir.
-
Coba Parameter yang berbeda
Coba ubah nilai parameter untuk melihat bagaimana hal ini memengaruhi hasil.
Anda juga dapat menjalankan beberapa pernyataan satu demi satu. Panel hasil baru akan muncul untuk setiap pernyataan.
Template Prosedur Tersimpan
Di SQL Server 2016, Anda dapat membuat prosedur tersimpan dengan mengklik kanan Prosedur Tersimpan node di Object Explorer dan memilih New> Stored Procedure... atau Baru> Prosedur Tersimpan yang Dikompilasi Secara Asli... .
Ini akan membuka template yang siap diisi dengan prosedur spesifik Anda sendiri.
Jalankan Prosedur Tersimpan melalui GUI
Anda juga dapat menggunakan antarmuka pengguna grafis untuk menjalankan prosedur tersimpan.
-
Luncurkan Execute Procedure Kotak Dialog
Di Object Explorer, klik kanan pada stored procedure dan pilih Execute Stored Procedure... .
-
Parameter Pasokan
Masukkan nilai untuk parameter apa pun yang diperlukan prosedur tersimpan, lalu klik OK .
-
Hasilnya
Hasilnya ditampilkan.
Ubah Prosedur Tersimpan
Jika Anda perlu mengubah prosedur tersimpan yang ada, cukup ganti CREATE
dengan ALTER
(bersama dengan prosedur yang diperbarui).
Contoh ini memodifikasi prosedur tersimpan sehingga hasilnya diurutkan berdasarkan tanggal rilis dalam urutan menurun:
ALTER PROCEDURE spRecentAlbums @Count int AS SELECT Albums.ReleaseDate, Albums.AlbumName, Genres.Genre, Artists.ArtistName, Artists.ActiveFrom FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId INNER JOIN Genres ON Albums.GenreId = Genres.GenreId WHERE (Albums.ReleaseDate > DATEADD(year, - @Count, GETDATE())) ORDER BY Albums.ReleaseDate DESC;
Prosedur Tersimpan Sistem
SQL Server mencakup sejumlah besar prosedur tersimpan sistem untuk membantu dalam tugas-tugas administrasi database. Banyak tugas yang dapat Anda lakukan melalui GUI dapat dilakukan melalui prosedur tersimpan sistem. Misalnya, beberapa hal yang dapat Anda lakukan dengan prosedur tersimpan sistem meliputi:
- Konfigurasikan akun keamanan
- Siapkan server tertaut
- Buat rencana pemeliharaan basis data
- Buat katalog pencarian teks lengkap
- Tambahkan login jarak jauh
- Konfigurasikan replikasi
- Menyiapkan tugas terjadwal
- dan masih banyak lagi...
Prosedur tersimpan sistem diawali dengan sp_ , jadi sebaiknya hindari menggunakan awalan itu untuk prosedur Anda sendiri.
Konvensi Penamaan
Sebaiknya kembangkan konvensi penamaan yang konsisten untuk prosedur tersimpan Anda (dan untuk semua objek lain di database Anda).
Beberapa orang mengawali prosedur tersimpan mereka dengan usp_ (untuk menunjukkan prosedur tersimpan yang ditentukan pengguna), yang lain memulainya dengan kata kunci SQL seperti select , masukkan , perbarui , hapus . Lainnya menggunakan singkatan untuk aplikasi.
Beberapa menggunakan garis bawah untuk memisahkan setiap kata dalam prosedur tersimpan (misalnya, recent_albums ), sementara yang lain akan menggunakan huruf besar (misalnya, RecentAlbums ).
Oleh karena itu, ada kemungkinan bahwa prosedur tersimpan kami dapat dinamai salah satu dari berikut ini, bergantung pada konvensi penamaan yang digunakan.
- Album Terbaru
- album_terkini
- uspAlbum Terbaru
- usp_recent_albums
- pilihAlbum Terbaru
- pilih_Album Terbaru
- pilih_album_baru
- getAlbum Terbaru
- get_recent_albums
Anda mendapatkan gambarnya. Yang penting konsistensi. Pilih satu dan patuhi itu. Ini akan membuatnya lebih mudah ketika Anda perlu menggunakan prosedur tersimpan. Bayangkan memiliki skor, atau bahkan ratusan prosedur tersimpan, dan setiap kali Anda menjalankannya, Anda perlu menavigasinya di Object Explorer semata-mata karena Anda tidak dapat mengingat apakah Anda menyebutnya usp_RecentAlbums atau uspRecentAlbums .
Seperti yang disebutkan, hindari menggunakan sp_ sebagai awalan untuk nama prosedur tersimpan Anda. SQL Server menggunakan awalan ini untuk prosedur tersimpan sistem.
SQL Server mencari prosedur tersimpan sistem terlebih dahulu, jadi yang terbaik, Anda akan mendapatkan pukulan kinerja. Paling buruk, prosedur Anda tidak akan berjalan (jika memiliki nama yang sama dengan prosedur tersimpan sistem).