Menjalankan prosedur tersimpan
Berlaku untuk: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Artikel ini menjelaskan cara menjalankan prosedur tersimpan di SQL Server dengan menggunakan SQL Server Management Studio atau Transact-SQL.
Ada berbagai cara untuk menjalankan prosedur tersimpan. Pendekatan pertama dan paling umum adalah bagi aplikasi atau pengguna untuk memanggil prosedur. Pendekatan lain adalah mengatur prosedur tersimpan untuk berjalan secara otomatis saat instans SQL Server dimulai.
Ketika prosedur dipanggil oleh aplikasi atau pengguna, kata kunci TRANSACT-SQL EXECUTE atau EXEC secara eksplisit dinyatakan dalam panggilan. Prosedur ini dapat dipanggil dan dijalankan tanpa kata kunci EXEC jika prosedur adalah pernyataan pertama dalam batch Transact-SQL.
Pembatasan dan batasan
Kolase database panggilan digunakan saat mencocokkan nama prosedur sistem. Untuk alasan ini, selalu gunakan kasus nama prosedur sistem yang tepat dalam panggilan prosedur. Misalnya, kode ini gagal jika dijalankan dalam konteks database yang memiliki kolatasi peka huruf besar/kecil:
EXEC SP_heLP; -- Fails to resolve because SP_heLP doesn't equal sp_help
Untuk menampilkan nama prosedur sistem yang tepat, kueri tampilan katalog sys.system_objects dan sys.system_parameters .
Jika prosedur yang ditentukan pengguna memiliki nama yang sama dengan prosedur sistem, prosedur yang ditentukan pengguna mungkin tidak pernah dijalankan.
Rekomendasi
Gunakan rekomendasi berikut untuk menjalankan prosedur tersimpan.
Prosedur tersimpan sistem
Prosedur sistem dimulai dengan awalan sp_
. Karena secara logis muncul di semua database yang ditentukan pengguna dan sistem, prosedur sistem dapat dijalankan dari database apa pun tanpa harus sepenuhnya memenuhi syarat nama prosedur. Namun, yang terbaik adalah memenuhi syarat skema semua nama prosedur sistem dengan sys
nama skema untuk mencegah konflik nama. Contoh berikut menunjukkan metode yang direkomendasikan untuk memanggil prosedur sistem.
EXEC sys.sp_who;
Prosedur tersimpan yang ditentukan pengguna
Saat menjalankan prosedur yang ditentukan pengguna, yang terbaik adalah memenuhi syarat nama prosedur dengan nama skema. Praktik ini memberikan peningkatan performa kecil karena Mesin Database tidak perlu mencari beberapa skema. Menggunakan nama skema juga mencegah menjalankan prosedur yang salah jika database memiliki prosedur dengan nama yang sama dalam beberapa skema.
Contoh berikut menunjukkan metode yang direkomendasikan untuk menjalankan prosedur yang ditentukan pengguna. Prosedur ini menerima dua parameter input. Untuk informasi tentang menentukan parameter input dan output, lihat Menentukan parameter dalam prosedur tersimpan.
EXECUTE SalesLT.uspGetCustomerCompany @LastName = N'Cannon', @FirstName = N'Chris';
GO
Atau:
EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris';
GO
Jika prosedur yang ditentukan pengguna yang tidak memenuhi syarat ditentukan, Mesin Database mencari prosedur dalam urutan berikut:
sys
Skema database saat ini.Skema default pemanggil jika prosedur dijalankan dalam batch atau di SQL dinamis. Jika nama prosedur yang tidak memenuhi syarat muncul di dalam isi definisi prosedur lain, skema yang berisi prosedur lain ini akan dicari berikutnya.
dbo
Skema dalam database saat ini.
Keamanan
Untuk informasi keamanan, lihat EXECUTE AS (Transact-SQL) dan EXECUTE AS Clause (Transact-SQL).
Izin
Untuk informasi izin, lihat Izin di EXECUTE (Transact-SQL).
Eksekusi prosedur tersimpan
Anda dapat menggunakan antarmuka pengguna SQL Server Management Studio (SSMS) atau Transact-SQL di jendela kueri SSMS untuk menjalankan prosedur tersimpan. Selalu gunakan versi terbaru SSMS.
Menggunakan SQL Server Management Studio
Di Object Explorer, sambungkan ke instans SQL Server atau Azure SQL Database, perluas instans tersebut, lalu perluas Database.
Perluas database yang Anda inginkan, perluas Keterprograman, lalu perluas Prosedur Tersimpan.
Klik kanan prosedur tersimpan yang ingin Anda jalankan dan pilih Jalankan Prosedur Tersimpan.
Dalam kotak dialog Jalankan Prosedur , Parameter menunjukkan nama setiap parameter, Jenis Data menunjukkan jenis datanya, dan Parameter Output menunjukkan apakah itu parameter output.
Untuk setiap parameter:
- Di bawah Nilai, ketik nilai yang akan digunakan untuk parameter .
- Di bawah Teruskan Nilai Null, pilih apakah akan meneruskan NULL sebagai nilai parameter.
Pilih OK untuk menjalankan prosedur tersimpan. Jika prosedur tersimpan tidak memiliki parameter apa pun, cukup pilih OK.
Prosedur tersimpan berjalan, dan hasilnya muncul di panel Hasil .
Misalnya, untuk menjalankan
SalesLT.uspGetCustomerCompany
prosedur tersimpan dari artikel Buat prosedur tersimpan, masukkan Meriam untuk parameter @LastName dan Chris untuk parameter @FirstName, dan pilih OK. Prosedur ini mengembalikanFirstName
Chris,LastName
Cannon, danCompanyName
Outdoor Sporting Goods.
Menggunakan Transact-SQL di jendela kueri
Di SQL Server, sambungkan ke instans SQL Server atau Azure SQL Database.
Dari toolbar, pilih Kueri Baru.
Masukkan pernyataan EXECUTE dengan sintaks berikut ke dalam jendela kueri, yang menyediakan nilai untuk semua parameter yang diharapkan:
EXECUTE <ProcedureName> N'<Parameter 1 value>, N'<Parameter x value>; GO
Misalnya, pernyataan Transact-SQL berikut menjalankan
uspGetCustomerCompany
prosedur tersimpan dan denganCannon
sebagai@LastName
nilai parameter danChris
sebagai@FirstName
nilai parameter:EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris'; GO
Dari toolbar, pilih Jalankan. Prosedur tersimpan berjalan.
Opsi untuk nilai parameter
Ada beberapa cara untuk memberikan parameter dan nilai dalam pernyataan EXECUTE prosedur tersimpan. Contoh berikut menunjukkan beberapa opsi berbeda untuk pernyataan EXECUTE.
Jika Anda memberikan nilai parameter dalam urutan yang sama seperti yang ditentukan dalam prosedur tersimpan, Anda tidak perlu menyatakan nama parameter. Contohnya:
EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris';
Jika Anda memberikan nama parameter dalam
@parameter_name=value
pola, Anda tidak perlu menentukan nama parameter dan nilai dalam urutan yang sama seperti yang ditentukan. Misalnya, salah satu pernyataan berikut valid:EXEC SalesLT.uspGetCustomerCompany @FirstName = N'Chris', @LastName = N'Cannon';
atau:
EXEC SalesLT.uspGetCustomerCompany @LastName = N'Cannon', @FirstName = N'Chris';
Jika Anda menggunakan
@parameter_name=value
formulir untuk parameter apa pun, Anda harus menggunakannya untuk semua parameter berikutnya dalam pernyataan tersebut. Misalnya, Anda tidak dapat menggunakanEXEC SalesLT.uspGetCustomerCompany1 @FirstName = N'Chris', N'Cannon';
.
Eksekusi otomatis saat startup
Berlaku untuk: SQL Server
Di SQL Server, anggota sysadmin
peran server dapat menggunakan sp_procoption untuk mengatur atau menghapus prosedur untuk eksekusi otomatis saat startup. Prosedur startup harus berada dalam master
database, harus dimiliki oleh sa
, dan tidak dapat memiliki parameter input atau output. Untuk informasi selengkapnya, lihat sp_procoption (Transact-SQL).
Prosedur yang ditandai untuk eksekusi otomatis saat startup dijalankan setiap kali SQL Server dimulai dan database dipulihkan selama proses startup tersebut master
. Menyiapkan prosedur untuk dijalankan secara otomatis dapat berguna untuk melakukan operasi pemeliharaan database atau agar prosedur berjalan terus menerus sebagai proses latar belakang.
Penggunaan lain untuk eksekusi otomatis adalah agar prosedur melakukan tugas sistem atau pemeliharaan di tempdb
, seperti membuat tabel sementara global. Eksekusi otomatis memastikan bahwa tabel sementara seperti itu selalu ada ketika tempdb
dibuat ulang selama startup SQL Server.
Prosedur yang dijalankan secara otomatis beroperasi dengan izin yang sama dengan anggota sysadmin
peran server tetap. Setiap pesan kesalahan yang dihasilkan oleh prosedur menulis ke log kesalahan SQL Server.
Tidak ada batasan jumlah prosedur startup yang dapat Anda miliki, tetapi setiap prosedur startup menggunakan satu utas pekerja saat mengeksekusi. Jika Anda perlu menjalankan beberapa prosedur saat startup tetapi tidak perlu menjalankannya secara paralel, buat satu prosedur prosedur startup dan minta prosedur tersebut memanggil prosedur lain. Metode ini hanya menggunakan satu utas pekerja.
Tip
Jangan mengembalikan kumpulan hasil apa pun dari prosedur yang dijalankan secara otomatis. Karena prosedur sedang dijalankan oleh SQL Server alih-alih aplikasi atau pengguna, tidak ada tempat untuk set hasil yang akan dijalankan.
Catatan
Azure SQL Database dirancang untuk mengisolasi fitur dari dependensi pada master
database. Dengan demikian, pernyataan Transact-SQL yang mengonfigurasi opsi tingkat server tidak tersedia di Azure SQL. Anda sering dapat menemukan alternatif yang sesuai dari layanan Azure lainnya seperti pekerjaan Elastic atau Azure Automation.
Mengatur prosedur untuk dijalankan secara otomatis saat startup
Hanya administrator sistem (sa
) yang dapat menandai prosedur untuk dijalankan secara otomatis.
Di SSMS, sambungkan ke Mesin Database.
Dari toolbar Standar, pilih Kueri Baru.
Masukkan perintah sp_procoption berikut untuk mengatur prosedur tersimpan agar dijalankan secara otomatis di startup SQL Server.
EXEC sp_procoption @ProcName = N'<stored procedure name>' , @OptionName = 'startup' , @OptionValue = 'on'; GO
Di toolbar, pilih Jalankan.
Menghentikan prosedur agar tidak dijalankan secara otomatis saat startup
dapat sysadmin
menggunakan sp_procoption untuk menghentikan prosedur agar tidak dijalankan secara otomatis di startup SQL Server.
Di SSMS, sambungkan ke Mesin Database.
Dari toolbar Standar, pilih Kueri Baru.
Masukkan perintah berikut ke dalam jendela kueri.
EXEC sp_procoption @ProcName = N'<stored procedure name>' , @OptionName = 'startup' , @OptionValue = 'off'; GO
Di toolbar, pilih Jalankan.