Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Prosedur tersimpan di SQL Server adalah grup dari satu atau beberapa pernyataan Transact-SQL atau referensi ke metode bahasa runtime umum (CLR) Microsoft .NET Framework. Prosedur menyerupai konstruksi dalam bahasa pemrograman lain karena dapat:
Terima parameter input dan kembalikan beberapa nilai dalam bentuk parameter output ke program panggilan.
Berisi pernyataan pemrograman yang melakukan operasi dalam database. Ini termasuk memanggil prosedur lain.
Mengembalikan nilai status ke program panggilan untuk menunjukkan keberhasilan atau kegagalan (dan alasan kegagalan).
Manfaat Menggunakan Prosedur Tersimpan
Daftar berikut ini menjelaskan beberapa manfaat menggunakan prosedur.
Mengurangi lalu lintas jaringan server/klien
Perintah dalam prosedur dieksekusi sebagai satu kumpulan kode. Hal ini dapat secara signifikan mengurangi lalu lintas jaringan antara server dan klien karena hanya panggilan untuk menjalankan prosedur yang dikirim melalui jaringan. Tanpa enkapsulasi kode yang disediakan oleh prosedur, setiap baris kode individu harus melintasi jaringan.
Keamanan yang makin kuat
Beberapa pengguna dan program klien dapat melakukan operasi pada objek database yang mendasari melalui prosedur, bahkan jika pengguna dan program tidak memiliki izin langsung pada objek yang mendasarinya. Prosedur mengontrol proses dan aktivitas apa yang dilakukan dan melindungi objek database yang mendasarinya. Hal ini menghilangkan persyaratan untuk memberikan izin pada tingkat objek individual dan menyederhanakan lapisan keamanan.
Klausa EXECUTE AS dapat ditentukan dalam pernyataan CREATE PROCEDURE untuk memungkinkan peniruan nama pengguna lain, atau memungkinkan pengguna atau aplikasi untuk melakukan aktivitas database tertentu tanpa memerlukan izin langsung pada objek dan perintah yang mendasar. Misalnya, beberapa tindakan seperti TRUNCATE TABLE, tidak memiliki izin yang dapat diberikan. Untuk menjalankan TRUNCATE TABLE, pengguna harus memiliki izin ALTER pada tabel yang ditentukan. Memberikan izin ALTER pengguna pada tabel mungkin tidak ideal karena pengguna akan secara efektif memiliki izin di luar kemampuan untuk memotong tabel. Dengan menggabungkan pernyataan TRUNCATE TABLE dalam modul dan menentukan bahwa modul dijalankan sebagai pengguna yang memiliki izin untuk mengubah tabel, Anda dapat memperluas izin untuk memotong tabel kepada pengguna yang Anda berikan izin EXECUTE pada modul.
Saat memanggil prosedur melalui jaringan, hanya panggilan untuk menjalankan prosedur yang terlihat. Oleh karena itu, pengguna berbahaya tidak dapat melihat nama objek tabel dan database, menyematkan pernyataan Transact-SQL mereka sendiri, atau mencari data penting.
Menggunakan parameter prosedur membantu melindungi dari serangan injeksi SQL. Karena input parameter diperlakukan sebagai nilai harfiah dan bukan sebagai kode yang dapat dieksekusi, lebih sulit bagi penyerang untuk memasukkan perintah ke dalam pernyataan Transact-SQL di dalam prosedur dan membahayakan keamanan.
Prosedur dapat dienkripsi, membantu mengaburkan kode sumber. Untuk informasi selengkapnya, lihat Enkripsi SQL Server.
Penggunaan kembali kode
Kode untuk setiap operasi database yang berulang adalah kandidat yang sempurna untuk enkapsulasi dalam prosedur. Ini menghilangkan penulisan ulang kode yang sama tanpa perlu, mengurangi inkonsistensi kode, dan memungkinkan kode diakses dan dijalankan oleh pengguna atau aplikasi apa pun yang memiliki izin yang diperlukan.
Perawatan yang lebih mudah
Ketika aplikasi klien memanggil prosedur dan menyimpan operasi database di tingkat data, hanya prosedur yang harus diperbarui untuk setiap perubahan dalam database yang mendasarinya. Tingkat aplikasi tetap terpisah dan tidak perlu tahu bagaimana perubahan apa pun pada tata letak database, hubungan, atau proses.
Peningkatan performa
Secara default, prosedur mengkompilasi pertama kali dijalankan dan membuat rencana eksekusi yang digunakan kembali untuk eksekusi berikutnya. Karena prosesor kueri tidak harus membuat rencana baru, biasanya membutuhkan lebih sedikit waktu dalam memproses prosedur.
Jika telah ada perubahan signifikan pada tabel atau data yang direferensikan oleh prosedur, rencana yang telah dikompilasi sebenarnya dapat menyebabkan prosedur berjalan lebih lambat. Dalam hal ini, kompilasi ulang prosedur dan memaksa rencana eksekusi baru dapat meningkatkan performa.
Jenis Prosedur Tersimpan
Ditentukan pengguna
Prosedur yang ditentukan pengguna dapat dibuat dalam database yang ditentukan pengguna atau di semua database sistem kecuali database Sumber Daya . Prosedur ini dapat dikembangkan baik dalam Transact-SQL atau sebagai referensi ke metode bahasa runtime umum (CLR) Microsoft .NET Framework.
Sementara
Prosedur sementara adalah bentuk prosedur yang ditentukan pengguna. Prosedur sementara seperti prosedur permanen, kecuali prosedur sementara disimpan dalam tempdb. Ada dua jenis prosedur sementara: lokal dan global. Mereka berbeda satu sama lain dalam nama mereka, visibilitas mereka, dan ketersediaannya. Prosedur sementara lokal memiliki tanda angka tunggal (#) sebagai karakter pertama dari namanya; mereka hanya terlihat oleh koneksi pengguna saat ini, dan mereka dihapus ketika koneksi ditutup. Prosedur temporer global memiliki dua tanda angka (##) sebagai dua karakter pertama dari namanya; prosedur tersebut terlihat oleh pengguna mana pun setelah prosedur tersebut dibuat, dan prosedur tersebut dihapus di akhir sesi terakhir yang menggunakan prosedur tersebut.
Sistem
Prosedur sistem disertakan dengan SQL Server. Mereka disimpan secara fisik di database Sumber Daya internal yang tersembunyi dan secara logis muncul dalam skema sys dari setiap database yang ditentukan sistem dan pengguna. Selain itu, database msdb juga berisi prosedur tersimpan sistem dalam skema dbo yang digunakan untuk menjadwalkan pemberitahuan dan pekerjaan. Karena prosedur sistem dimulai dengan awalan sp_, kami sarankan Anda tidak menggunakan awalan ini saat menamai prosedur yang ditentukan pengguna. Untuk daftar lengkap prosedur sistem, lihat Prosedur Tersimpan Sistem (Transact-SQL)
SQL Server mendukung prosedur sistem yang menyediakan antarmuka dari SQL Server ke program eksternal untuk berbagai aktivitas pemeliharaan. Prosedur yang diperluas ini menggunakan awalan xp_. Untuk daftar lengkap prosedur yang diperluas, lihat Prosedur Tersimpan Diperpanjang Umum (Transact-SQL).
User-Defined yang diperluas
Prosedur yang diperluas memungkinkan pembuatan rutinitas eksternal dalam bahasa pemrograman seperti C. Prosedur ini adalah DLL yang dapat dimuat dan dijalankan secara dinamis oleh instans SQL Server.
Nota
Prosedur tersimpan yang diperluas akan dihapus dalam versi SQL Server yang akan datang. Jangan gunakan fitur ini dalam pekerjaan pengembangan baru, dan ubah aplikasi yang saat ini menggunakan fitur ini sesegera mungkin. Buat prosedur CLR sebagai gantinya. Metode ini menyediakan alternatif yang lebih kuat dan aman untuk menulis prosedur yang diperluas.
Tugas Terkait
| Deskripsi Tugas | Topik |
| Menjelaskan cara membuat prosedur tersimpan. | Membuat Prosedur Tersimpan |
| Menjelaskan cara mengubah prosedur yang ada. | Mengubah Prosedur Tersimpan |
| Menjelaskan cara menghapus prosedur tersimpan. | Menghapus Prosedur Tersimpan |
| Menjelaskan cara menjalankan prosedur tersimpan. | Menjalankan Prosedur Tersimpan |
| Menjelaskan cara memberikan izin pada prosedur tersimpan. | Memberikan Izin pada Prosedur Tersimpan |
| Menjelaskan cara mengembalikan data dari prosedur tersimpan ke aplikasi. | Mengembalikan Data dari Prosedur Tersimpan |
| Menjelaskan cara mengkombinasikan ulang prosedur tersimpan. | Kompilasi ulang Prosedur Tersimpan |
| Menjelaskan cara mengganti nama prosedur tersimpan. | Mengganti nama Prosedur Tersimpan |
| Menjelaskan cara melihat definisi prosedur tersimpan. | Lihat Definisi Prosedur Tersimpan |
| Menjelaskan cara melihat dependensi pada prosedur tersimpan. | Menampilkan Ketergantungan Prosedur Tersimpan |