Bagikan melalui


Prosedur tersimpan (Mesin Database)

Berlaku untuk:SQL ServerDatabase Azure SQLInstans Terkelola Azure SQLAzure Synapse AnalyticsSistem Platform Analitik (PDW)Database SQL di Microsoft Fabric

Prosedur tersimpan di SQL Server adalah sekelompok 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. Pernyataan 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. Pendekatan ini dapat secara signifikan mengurangi lalu lintas jaringan antara server dan klien karena hanya panggilan untuk menjalankan prosedur yang dikirim di seluruh 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. Pendekatan ini menghilangkan persyaratan untuk memberikan izin pada tingkat objek individual dan menyederhanakan lapisan keamanan.

Klausa EXECUTE AS dapat ditentukan dalam CREATE PROCEDURE pernyataan untuk memungkinkan peniruan identitas 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 ALTER izin pada tabel yang ditentukan. Memberikan izin pengguna ALTER pada tabel mungkin tidak ideal, karena pengguna secara efektif memiliki izin di luar kemampuan untuk memotong tabel. Dengan menggabungkan TRUNCATE TABLE pernyataan 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 EXECUTE izin pada modul.

Ketika aplikasi 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.

Anda dapat mengenkripsi prosedur untuk 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 pembungkusan dalam prosedur. Pendekatan ini menghilangkan penulisan ulang kode yang sama tanpa perlu, mengurangi inkonsistensi kode, dan memungkinkan pengguna atau aplikasi apa pun dengan izin yang diperlukan untuk mengakses dan menjalankan kode.

Perawatan yang lebih mudah

Ketika aplikasi klien memanggil prosedur dan menyimpan operasi database di tingkat data, Anda hanya perlu memperbarui prosedur untuk setiap perubahan dalam database yang mendasar. Tingkat aplikasi tetap terpisah dan tidak perlu tahu tentang 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 perlu membuat paket baru, biasanya membutuhkan lebih sedikit waktu untuk memproses prosedur.

Jika ada perubahan signifikan pada tabel atau data yang direferensikan oleh prosedur, rencana yang telah dikompilasi mungkin benar-benar menyebabkan prosedur berjalan lebih lambat. Dalam hal ini, kompilasi ulang prosedur dan memaksa rencana eksekusi baru dapat meningkatkan performa.

Jenis prosedur tersimpan

User-defined

Prosedur yang ditentukan pengguna dapat dibuat dalam database yang ditentukan pengguna atau di semua database sistem kecuali Resource database. Prosedur ini dapat dikembangkan baik dalam Transact-SQL, atau sebagai referensi ke metode .NET Framework common runtime language (CLR).

Temporary

Prosedur sementara adalah bentuk prosedur yang ditentukan pengguna. Prosedur sementara seperti prosedur permanen, kecuali prosedur tersebut disimpan di 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 saat koneksi ditutup. Prosedur sementara global memiliki dua tanda angka (##) sebagai dua karakter pertama dari namanya. Mereka terlihat oleh pengguna mana pun setelah mereka dibuat, dan dihapus di akhir sesi terakhir yang menggunakan prosedur.

System

Prosedur sistem disertakan dengan Mesin Database. Mereka disimpan secara fisik dalam database internal yang tersembunyi Resource dan secara logis muncul dalam sys skema setiap database yang ditentukan sistem dan ditentukan pengguna. Selain itu, msdb database juga berisi prosedur tersimpan sistem dalam dbo skema yang digunakan untuk menjadwalkan pemberitahuan dan pekerjaan. Karena prosedur sistem dimulai dengan awalan sp_, jangan gunakan awalan ini saat menamai prosedur yang ditentukan pengguna. Untuk daftar lengkap prosedur sistem, lihat Prosedur tersimpan sistem.

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 umum yang diperluas.

Diperluas yang ditentukan pengguna

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.

Note

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.

Deskripsi tugas Article
Menjelaskan cara membuat prosedur tersimpan. Membuat prosedur tersimpan
Menjelaskan cara mengubah prosedur tersimpan. 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. Melihat definisi prosedur tersimpan
Menjelaskan cara melihat dependensi pada prosedur tersimpan. Menampilkan dependensi prosedur tersimpan
Menjelaskan bagaimana parameter digunakan dalam prosedur tersimpan. Parameters