Artikel ini menyajikan 4 cara menggunakan T-SQL untuk mendapatkan definisi prosedur tersimpan di SQL Server.
Definisinya adalah pernyataan T-SQL aktual yang digunakan untuk membuat prosedur tersimpan.
Tiga metode di sini sama persis dengan yang digunakan untuk mengembalikan definisi tampilan (kecuali di sini, metode tersebut digunakan pada prosedur tersimpan, bukan tampilan).
Contoh 1 – Tampilan Katalog Sistem sys.sql_modules
sys.sql_modules
tampilan katalog sistem mengembalikan baris untuk setiap objek yang merupakan modul yang ditentukan bahasa SQL di SQL Server.
Dengan kata lain, Anda dapat menggunakan tampilan ini untuk mengembalikan informasi tentang objek dari berbagai jenis, termasuk fungsi, tampilan, dan tentu saja, prosedur tersimpan.
Salah satu kolom yang dikembalikan dengan tampilan ini disebut definition
. Sesuai dengan namanya, ini mengembalikan definisi objek.
SELECT definition FROM sys.sql_modules WHERE object_id = object_id('uspGetAlbumsByArtist');
Hasil:
+--------------+ | definition | |--------------| | CREATE PROCEDURE [dbo].[uspGetAlbumsByArtist] @ArtistId int AS SELECT AlbumName FROM [dbo].[Albums] WHERE ArtistId = @ArtistId | +--------------+
Saya menggunakan antarmuka baris perintah (CLI) dengan contoh ini, jadi hasilnya diformat dengan baik.
Jika Anda menggunakan GUI (seperti SSMS atau Azure Data Studio) untuk mengembalikan hasil dalam kisi, definisi kemungkinan akan dikembalikan dalam satu baris panjang dalam satu sel. Dalam kasus seperti itu, Anda perlu melakukan beberapa pekerjaan ekstra jika ingin ditampilkan dalam format yang lebih mudah dibaca. Atau, Anda dapat menggunakan sp_helptext
metode di bawah ini.
Contoh 2 – Prosedur Tersimpan Sistem sp_helptext
Metode lain untuk mengembalikan definisi prosedur tersimpan adalah dengan menggunakan sp_helptext
prosedur tersimpan sistem. Selain dapat mengembalikan definisi untuk prosedur tersimpan (tidak terenkripsi), itu juga dapat mengembalikan definisi aturan yang ditentukan pengguna, default, tampilan, fungsi Transact-SQL yang ditentukan pengguna, pemicu, kolom yang dihitung, CHECK
batasan, atau objek sistem seperti prosedur tersimpan sistem.
Prosedur tersimpan ini menampilkan definisi di beberapa baris. Setiap baris berisi 255 karakter definisi T-SQL.
Contoh:
EXEC sp_helptext 'uspGetAlbumsByArtist';
Berikut hasil yang saya dapatkan saat menggunakan GUI (Azure Data Studio):
Dan inilah yang saya dapatkan menggunakan antarmuka baris perintah saya:
+--------+ | Text | |--------| | CREATE PROCEDURE [dbo].[uspGetAlbumsByArtist] @ArtistId int AS | | SELECT AlbumName | | FROM [dbo].[Albums] | | WHERE ArtistId = @ArtistId | +--------+
Contoh 3 – Fungsi OBJECT_DEFINITION()
Cara lain untuk mengembalikan definisi prosedur tersimpan adalah dengan menggunakan OBJECT_DEFINITION()
fungsi. Seperti metode sebelumnya, metode ini juga dapat mengembalikan definisi tipe objek lain.
Berikut ini contoh penggunaan fungsi ini:
SELECT OBJECT_DEFINITION( OBJECT_ID('uspGetAlbumsByArtist') ) AS [Definition];
Hasil:
+--------------+ | Definition | |--------------| | CREATE PROCEDURE [dbo].[uspGetAlbumsByArtist] @ArtistId int AS SELECT AlbumName FROM [dbo].[Albums] WHERE ArtistId = @ArtistId | +--------------+
Contoh 4 – Tampilan Skema Informasi Sistem RUTIN
ROUTINES
tampilan skema informasi sistem juga dapat mengembalikan definisi prosedur tersimpan (dan juga fungsi).
Tampilan ini mengembalikan banyak kolom, salah satunya adalah definisi objek. Oleh karena itu kami dapat memberi nama kolom itu untuk mengembalikan definisi saja:
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME = 'uspGetAlbumsByArtist';
Hasil:
+----------------------+ | ROUTINE_DEFINITION | |----------------------| | CREATE PROCEDURE [dbo].[uspGetAlbumsByArtist] @ArtistId int AS SELECT AlbumName FROM [dbo].[Albums] WHERE ArtistId = @ArtistId | +----------------------+
Perhatikan bahwa ROUTINE_DEFINITION
kolom dalam tampilan sistem ini memiliki panjang maksimum nvarchar(4000) . Untuk definisi yang lebih besar dari ini, Anda dapat menggunakan OBJECT_DEFINITION()
fungsi atau sys.sql_modules
lihat pada contoh sebelumnya. Keduanya menggunakan nvarchar(max) untuk definisi, sehingga mereka tidak memiliki batasan karakter ROUTINE_DEFINITION
kolom (seperti yang disebutkan, adalah nvarchar(4000) ).